SpringBoot统一异常处理与404
几天前,我收到一封邮件,邮件是Chatra的消息。有人问了我一个问题。从消息里我猜是关于SpringBoot统一异常处理与404的问题。当时,没啥时间就没去自己试。现在,我来说说我的解决办法。

我们的项目中可能会使用@ControllerAdvice来进行统一异常处理。比如,我在项目中所有Controller抛出的异常会返回同一个格式的JSON数据。但是,当我们请求一个不存在的页面的时候,我们看到的是这样的。

当然并不是404都是显示Whitelabel Error Page页面,通过BasicErrorController处理,我们可以知道,只有请求的MimeType是text/html的时候才是,如果不是text/html会返回一个404的JSON。
| |
那么,如何让404也走统一异常处理呢。
我们在网上可能一搜就能查到,通过下面这种方式来解决。
| |
spring.resources.add-mappings=false这个在我的另一篇博客中也提到过,这样设置会让静态资源没有handler。这个方式的原理就是通过这个设置使得没有handler处理404的问题,然后通过spring.mvc.throw-exception-if-no-handler-found=true来抛出异常。
这样坐确实能达到我们想要的效果,但是,我们的静态资源没法访问了。
那么,我想404的时候抛出异常而且静态资源能访问该怎么办呢?
其实,那个Whitelabel Error Page已经告诉我们答案了。我们自己处理/error就好了,这里我直接抛出异常,让它走统一异常处理。
| |