Spring ControllerAdvice中未处理404异常
我有一个简单的Spring MVC应用程序,其中我想使用处理所有未映射的url @ControllerAdvice
。这是控制器:
@ControllerAdvicepublic class ExceptionHandlerController {
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler(NoHandlerFoundException.class)
public String handle404() {
return "exceptions/404page";
}
}
尽管如此,每次都会获得Whitelabel错误页面。
我尝试使用RuntimeException.class
,HttpStatus.BAD_REQUEST
并扩展了类NoHandlerFoundException
但没有用。
有什么建议么?
回答:
要使其工作,您需要throwExceptionIfNoHandlerFound
在DispecherServlet 上设置属性。您可以执行以下操作:
spring.mvc.throwExceptionIfNoHandlerFound=true
在application.properties
文件中,否则请求将始终转发到默认servlet,并且将引发NoHandlerFoundException。
问题是,即使使用此配置,它也不起作用。从文档中:
请注意,如果使用org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,则请求将始终转发到默认servlet,并且在这种情况下永远不会引发NoHandlerFoundException。
由于默认情况下Spring
Boot使用,因此org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
您必须使用自己的方法覆盖它WebMvcConfigurer
:
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
// Do nothing instead of configurer.enable();
}
}
当然,上述情况在您的情况下可能会更复杂。
以上是 Spring ControllerAdvice中未处理404异常 的全部内容, 来源链接: utcz.com/qa/428966.html