Tôi muốn xử lý ngoại lệ 404 trang không tìm thấy trong ứng dụng web Spring MVC của mình, tôi đang sử dụng SPRING 4.2.5.RELEASE
, tôi đã đọc một số câu hỏi liên quan đến chủ đề này nhưng các câu hỏi tương tự đang sử dụng cấu hình java mùa xuân khác.Cách xử lý ngoại lệ trang 404 không tìm thấy trong Spring MVC với cấu hình java và không có Web.xml
Tôi có lớp Bộ điều khiển xử lý ngoại lệ toàn cầu có tất cả ngoại lệ, lớp này hoạt động tốt nhưng tôi không thể xử lý ngoại lệ cho trang 404 không tìm thấy.
Đây là phương pháp mà tôi mất sau một hướng dẫn
1) Tôi tạo ra một lớp có tên ResourceNotFoundException
mà kéo dài từ RuntimeException
và tôi putted chú thích này trong định nghĩa lớp @ResponseStatus(HttpStatus.NOT_FOUND)
như thế này:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
}
2) Tôi đã tạo phương thức này trong lớp điều khiển ngoại lệ của tôi
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFoundException() {
return "notFoundJSPPage";
}
Nhưng vẫn khi tôi đặt một URL không tồn tại Tôi nhận được lỗi này "Không có ánh xạ tìm thấy cho yêu cầu với URI HTTP"
Các câu hỏi mà tôi đã đọc nói rằng tôi cần phải kích hoạt để đúng một tùy chọn cho Người điều phối nhưng vì cấu hình của tôi khác với các câu hỏi khác và tôi không có số Web.xml
tôi không thể áp dụng điều đó.
Đây là Cấu hình của tôi.java
@EnableWebMvc
@Configuration
@ComponentScan({"config", "controllers"})
public class ConfigMVC extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
}
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
Đây là WebInitializer tôi
public class WebInicializar implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(ConfigMVC.class);
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
Dưới đây là toàn cầu điều khiển ngoại lệ Handler tôi
@ControllerAdvice
public class GlobalExceptionHandlerController {
@ExceptionHandler(value = NullPointerException.class)
public String handleNullPointerException(Exception e) {
System.out.println("A null pointer exception ocurred " + e);
return "nullpointerExceptionPage";
}
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = Exception.class)
public String handleAllException(Exception e) {
System.out.println("A unknow Exception Ocurred: " + e);
return "unknowExceptionPage";
}
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFoundException() {
return "notFoundJSPPage";
}
}
Và lớp tôi tạo ra mà kéo dài Runtime Exception
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException{
}
này công việc, nhưng thực tiễn tốt nhất hiện tại (tính đến Mùa xuân 4.2.3) được mô tả trong [câu trả lời này] (http://stackoverflow.com/a/31436535/2074605). – vallismortis
@vallismortis Thực tiễn tốt nhất hiện tại là mở rộng AbstractAnnotationConfigDispatcherServletInitializer? Ho-hum. –