我有一个简单的Spring MVC应用程序,其中我想使用处理所有未映射的url @ControllerAdvice。这是控制器:
@ControllerAdvice
@ControllerAdvice public class ExceptionHandlerController { @ResponseStatus(HttpStatus.NOT_FOUND) @ExceptionHandler(NoHandlerFoundException.class) public String handle404() { return "exceptions/404page"; } }
尽管如此,每次都会获得Whitelabel错误页面。
我尝试使用RuntimeException.class,HttpStatus.BAD_REQUEST并扩展了类NoHandlerFoundException但没有用。
RuntimeException.class
HttpStatus.BAD_REQUEST
NoHandlerFoundException
有什么建议么?
要使其工作,您需要throwExceptionIfNoHandlerFound在DispecherServlet 上设置属性。您可以执行以下操作:
throwExceptionIfNoHandlerFound
spring.mvc.throwExceptionIfNoHandlerFound=true
在application.properties文件中,否则请求将始终转发到默认servlet,并且将引发NoHandlerFoundException。
application.properties
问题是,即使使用此配置,它也不起作用。从文档中:
请注意,如果使用org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,则请求将始终转发到默认servlet,并且在这种情况下永远不会引发NoHandlerFoundException。
由于默认情况下Spring Boot使用,因此org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler您必须使用自己的方法覆盖它WebMvcConfigurer:
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(); } }
当然,上述情况在您的情况下可能会更复杂。