interceptor 和异常全局处理 Advice Advice中没有捕获异常

问题场景:

我有两个项目,都有全局拦截器 interceptor 和异常全局处理 Advice。且在Advice中处理的错误返回http status code 为200,只是接口msg字段输出异常message。

发现:

        其中一个项目访问一个不存在的链接 http status 为 500 (下面称为A500项目),另一个访问一个不存在的链接 http status 为 200项目为 (下面称为B200项目)。

        其中调试得知:

                        A500项目无论是否存在这个RequestMapping都会走过滤器 interceptor;过滤器某些验证没有通过抛出了自定义异常,而 Advice 无法捕获异常直接跳转到了 /error 页面走的Springboot默认错误处理逻辑。

                        A200项目访问RequestMapping不存在的链接会直接抛出异常class org.springframework.web.servlet.NoHandlerFoundException没有找到对应接口或者mapping。

期望结果:

        我期望A500也是不走过滤器或者走也可以,但是 http status 不要为 500,因为我们项目没有走 http code 而是接口的返回 no 字段来判断。

解决:

        经过比对两个项目不同,发现 A200 项目的 application.yml 文件中 static-path-pattern 如下:

spring:
  mvc:
    static-path-pattern: /static/**            # 自定义映射目录

        而 A500 中却没有 static-path-pattern 加上之后达到效果。

猜测:在Spring Boot中,默认情况下,静态资源请求是不会经过拦截器(Interceptor)链的,他会不会当做了静态资源去访问了呢?这还是要注意千万不要和静态资源冲突或者同名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值