Spring引导覆盖默认404异常处理
我已经找到了很多关于这方面的问题和答案,但似乎无论我做什么,我都无法绕过默认的白色标签应用程序页面,出现404个错误。使用启动版本1.4.x 我所做的是在我的应用程序中。yml:Spring引导覆盖默认404异常处理,spring,spring-mvc,spring-boot,Spring,Spring Mvc,Spring Boot,我已经找到了很多关于这方面的问题和答案,但似乎无论我做什么,我都无法绕过默认的白色标签应用程序页面,出现404个错误。使用启动版本1.4.x 我所做的是在我的应用程序中。yml: spring: mvc: throw-exception-if-no-handler-found: true 然后定义我自己的ResponseEntityExceptionHandler子类,并在其中添加@ControllerAdvice注释 my OverridedhandleNoHandlerFou
spring:
mvc:
throw-exception-if-no-handler-found: true
然后定义我自己的ResponseEntityExceptionHandler
子类,并在其中添加@ControllerAdvice
注释
my OverridedhandleNoHandlerFoundException
@ControllerAdvice
public class ThisIsNotWorking extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleNoHandlerFoundException(final NoHandlerFoundException ex,
final HttpHeaders headers, final HttpStatus status,
final WebRequest request) {
logger.info(ex.getClass().getName());
final String error = "No handler found for " + ex.getHttpMethod() + " " + ex.getRequestURL();
@ControllerAdvice
公共类ThisNotWorking扩展了ResponseEntityExceptionHandler{
@凌驾
受保护的响应handleNoHandlerFoundException(最终编号HandlerFoundException ex,
最终HttpHeaders标头,最终HttpStatus状态,
最终WebRequest(请求){
logger.info(例如getClass().getName());
final String error=“未找到“+ex.getHttpMethod()+”+ex.getRequestURL()的处理程序”;
^^只是一个片段,而不是所有的逻辑
但当我导航到启动应用程序的错误路径时,我在浏览器中得到了错误的json。我还需要做什么呢?最终我希望以自定义方式为我的应用程序处理这些404
我所做的是,我无法绕过404的默认白标签应用程序页面
错误
基本上,要处理白标签错误(404
)页面,您只需使用EmbeddedServletContainerCustomizer
中的addErrorPages
,并按如下所示处理404
错误(您不需要@ControllerAdvice
handleNoHandlerFoundException()
来自代码的方法):
需要记住的一点是,对于错误的URL和数据库中未找到的资源,都可能发生404错误。您知道您遇到的是哪一个错误吗?好的一点,我不想在控制器返回404时捕获异常,但我特别想在您转到未由任何请求映射定义的映射时捕获异常。您是否正在尝试r是否返回json响应,或自定义白色页面错误?我真的希望捕获404并注意到它们试图去哪里,然后将它们重定向到前端应用程序内的页面。您是否需要为此执行任何特殊操作?我可以导航到我提供给ErrorPage的路径,但如果我转到
/myapp/badpath
我仍然会收到whitelabel pagenothing special,您需要确保正在扫描此类的包(@Componentscan
)通过Spring containerSo我想我在这里找到了我的答案,这就是我正在努力解决的问题,但我会接受你的答案,因为它不适用于我的情况。谢谢,我不确定问题出在哪里,但对我来说很好。你需要有restful服务,同时使用默认的资源处理程序来提供静态资源和炫耀。T无论您试图以何种方式自定义错误/异常处理,默认资源处理程序都将处理404
@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,
"/YOUR_PAGE.html"));
}
}