我有一个使用Spring的Resteasy应用程序,其中包含ContainerRequestFilter
和ContainerResponseFilter
实现,注释为@Provider
。该应用程序使用的是Resteasy版本3.0-beta-6
。
这些过滤器在添加到web.xml中的resteasy.providers
上下文参数时按预期工作,如下所示:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>foo.filter.LoggingRequestFilter,
foo.filter.LoggingResponseFilter</paramvalue>
</context-param>
如果我从这里删除过滤器,则不再调用它们。
我假设这些提供商在使用org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
时会自动注册Resteasy。对我来说奇怪的是,它适用于以前版本的Resteasy中的PreProcessInterceptor
实现,并且仍然适用于v3,但Filters和ExceptionMappers不会自动注册。
resteasy.providers
注释并由Spring扫描,为什么需要@Provider
上下文参数?答案 0 :(得分:8)
为了让Spring扫描提供程序,我必须在我的Spring Java配置类中将includeFilters
参数添加到@ComponentScan
。
@ComponentScan(value = "com.foo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))
您也可以使用@Component
和@Provider
注释它们,Spring会确保在使用Resteasy SpringContextLoaderListener
时它们会被Resteasy检测到。