自 spring 4.2 RC3 以来最干净的解决方案是在类中使用新的钩子来扩展(或间接通过扩展),如下所示:createDispatcherServlet
AbstractDispatcherServletInitializer
AbstractAnnotationConfigDispatcherServletInitializer
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
/* ... */
@Override
protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
final DispatcherServlet dispatcherServlet = super.createDispatcherServlet(servletAppContext);
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
return dispatcherServlet;
}
}
然后,您可以使用全局(用 ) 进行注释的类,如参考文档中所述。在建议中,您可以按照此处所述处理。@ControllerAdvice
@ControllerAdvice
NoHandlerFoundException
@ExceptionHandler
这可能看起来像这样:
@ControllerAdvice
public class NoHandlerFoundControllerAdvice {
@ExceptionHandler(NoHandlerFoundException.class)
public ResponseEntity<String> handleNoHandlerFoundException(NoHandlerFoundException ex) {
// prepare responseEntity
return responseEntity;
}
}