Почему resteasy.providers по-прежнему требуется при использовании Spring с аннотациями @Provider?
У меня есть приложение Resteasy, которое использует Spring и содержит ContainerRequestFilter
а также ContainerResponseFilter
реализации, отмеченные @Provider
, Приложение использует версию 3.0-beta-6
Рестаси.
Эти фильтры работают должным образом, когда они добавляются в resteasy.providers
Параметр context в web.xml выглядит так:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>foo.filter.LoggingRequestFilter,
foo.filter.LoggingResponseFilter</paramvalue>
</context-param>
Если я уберу отсюда фильтры, они больше не будут называться.
Я предполагал, что эти провайдеры будут автоматически регистрироваться в Resteasy при использовании org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
, Странно для меня то, что это работает на PreProcessInterceptor
реализации в предыдущих версиях Resteasy, и все еще работает в v3, но Filters и ExceptionMappers не регистрируются автоматически.
Вопросы
- Почему
resteasy.providers
параметр контекста необходим, если классы помечены@Provider
а отсканирован весной? - Есть ли программный способ установить этих провайдеров во время выполнения?
1 ответ
Для того, чтобы провайдеры отсканировали Spring, мне пришлось добавить includeFilters
параметр для @ComponentScan
в моем классе конфигурации Java Spring.
@ComponentScan(value = "com.foo",
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Provider.class))
Вы также можете просто комментировать их @Component
вместе с @Provider
и Spring удостоверится, что они будут обнаружены Resteasy при использовании Resteasy SpringContextLoaderListener
,