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