有个项目,由于架构问题,开始没有重写拦截器,而在接口写了一大部分的时候(api是rest风格,主要使用get,post,put,delete,patch方法),发现有些功能需要在拦截器统一配置,于是才对拦截器重写,开始是发现swagger无法访问,放开资源后,就正常了,也没有对之前的接口进行复测,因为当时也没想到会引发这样的问题。突然有天,发现项目put请求的表单参数(@RequestParam)无法接收,而@RequestBody正常接收。而以前测试表单也是接收正常的,于是就怀疑是重写拦截器导致的问题,简单把整个拦截器及相关依赖注释掉,put请求正常。
于是找到如下方案,在启动类上加上注解@Import(FormContentFilter.class ),重启后问题解决,当然你也可以自己新建一个配置类(@Config)技术的还是你该注解。
//添加注解在主类上@Import(FormContentFilter.class)@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
//添加注解在配置类上,并确保能被Spring扫描到@Configuration@Import( FormContentFilter.class )public class FormContentConfig {}
由于时间不足,尚未对拦截器内部源码进行跟踪,只是找到解决问题的方法,没找到问题的源头,很是遗憾。同时也警示着,就算项目再紧,也提前做好公共基础配置的设计,不然后面隐藏bug带来的灾难,往往需要花上更多的时间去发现和弥补,防患于未然才是上策。