处理 "No mapping found for HTTP request in DispatcherServlet" 情况

Handling "No mapping found for HTTP request in DispatcherServlet" situation

我一直在尝试全局处理我的调度程序 servlet 没有为请求的定义映射 url 但还没有找到解决方案的情况。

这是我的 class 处理全局异常的方法:

@ControllerAdvice
public class GlobalExceptionHandlerController {

@Value("${exception.view.default}")
private String defaultExceptionView;

private static final Logger LOGGER = Logger.getLogger(GlobalExceptionHandlerController.class);

@ExceptionHandler(Exception.class)
public ModelAndView notFoundException(Exception e) {
    LOGGER.error("Error ocurred: " + e.getMessage());
    return new ModelAndView(defaultExceptionView)
            .addObject("code", "404")
            .addObject("name", "Page Not Found")
            .addObject("message", "We couldn't find requested resource");
    }
}

我在@ExceptionHandler 中尝试了很多不同的classes,但对我来说没有任何效果。处理程序工作正常 - 当我从其中一个控制器抛出异常并且它没有在本地处理时,它直接进入这个全局处理程序。

有没有办法通过@ControllerAdvice 执行这种异常处理?

是的,用 setThrowExceptionIfNoHandlerFound 配置你的 DispatcherServlet 设置

[...] whether to throw a NoHandlerFoundException when no Handler was found for this request. This exception can then be caught with a HandlerExceptionResolver or an @ExceptionHandler controller method.

照它说的去做,即。为 NoHandlerFoundException 异常定义 @ExceptionHandler