向Spring添加一个请求过滤器,以支持Rest资源注释?

时间:2018-07-10 12:55:37

标签: java spring spring-mvc

我的Spring Web应用程序是通过Java注释配置的(请参阅底部的配置类)。

是否有可能在一个控制器(或可能通过某种配置的许多控制器)的前面添加请求过滤器,该过滤器支持@RestController方法中可用的相同(或至少子集)注释,例如例如@PathVariable@RequestParam等?

到目前为止,我在HandlerInterceptor中找到了有关DispatcherServlet Interception docs接口的文档,并且按照Interceptors configuration中的内容配置了一个文档:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(ctx.getBean(CustomInterceptor.class));
}

但是拦截器实现了HandlerInterceptor接口,因此preHandle()方法具有给定的签名:

preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

我当然可以从参数中读取参数,标头值等,但是我想知道是否已经支持其他方法。

该过滤器显示在某种文档中(我使用的是SwaggerSpringFox)将是一个加分。


主要配置类

@EnableWebMvc
@Configuration
@EnableSwagger2
@ComponentScan(basePackages= { /* ... */ })
@PropertySource("classpath:config.properties")
public class WebappConfig implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext ctx;

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // extra Jackson configuration
    }

    // see below for this method
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(ctx.getBean(CustomInterceptor.class));
    }

}

0 个答案:

没有答案