阅读有关如何处理NoHandlerFoundException的Spring参考指南,并发现Spring默认将其设置throwExceptionIfNoHandlerFound为false。
知道这一点后,我认为将此参数设置为是一个好主意true。
我正在使用Spring Boot。
这样做:
MyConfig.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
@SpringBootApplication
public class MyConfig {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MyConfig.class, args);
context.getBean(DispatcherServlet.class).setThrowExceptionIfNoHandlerFound(true);
// ...
}
}
好吧,现在throwExceptionIfNoHandlerFound等于true。但是,这没有按预期进行。将DispatcherServlet继续不扔的NoHandlerFoundException。这样,我无法处理它。
CustomExceptionHandler.java (此方法无效)
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity <Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
// do my own handle ...
// then, return ...
}
}
经过一番搜索,发现添加@EnableWebMvc应该可以。然后,我确实将此注释添加到了我的CustomExceptionHandler
这样,手柄就可以工作了。但是,我正在使用Spring Boot。Spring Boot文档建议,如果我插入@EnableWebMvc,我将失去一些Spring Boot MVC自动配置功能,因为我将完全控制Spring MVC。(请参阅此处)。
“如果要完全控制Spring MVC,则可以添加带有@EnableWebMvc注释的自己的@Configuration。”
我会丢失Spring MVC自动配置吗?我的意思是@EnableWebMvc,就我而言,它不在@Configuration课程中。
我的问题基于这样一个事实,即我不确定上面的代码如何工作,我想知道是否还有另一种方式可以做到这一点而又不会丢失Spring MVC自动配置。有人可以解释吗?
相关分类