Spring ControllerAdvice中未处理404异常

我有一个简单的Spring MVC应用程序,其中我想使用处理所有未映射的url @ControllerAdvice。这是控制器:

@ControllerAdvice

public class ExceptionHandlerController {

@ResponseStatus(HttpStatus.NOT_FOUND)

@ExceptionHandler(NoHandlerFoundException.class)

public String handle404() {

return "exceptions/404page";

}

}

尽管如此,每次都会获得Whitelabel错误页面。

我尝试使用RuntimeException.classHttpStatus.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

回到顶部