问题描述
在 Spring Boot 2.4 上使用 Jersey 2.3。我有 2 个 JAX-RS 提供者。其中一个实现了 ContainerRequestFilter(PreMatching),另一个扩展了 JacksonJaxbJsonProvider(来自 jackson-jaxrs-json-provider)。
我正在将 ContainerRequestFilter 中的一个属性设置到 ContainerRequestContext 上。然后我尝试使用 @Context 将 ContainerRequestContext 注入到另一个 JAX-RS 提供程序。但是这种注入总是无效的。
如果我使用@Context 将相同的对象注入 JAX-RS 资源,Jersey 会注入它。不确定我在这里缺少什么。非常感谢任何帮助。
spark.sql("""
select from_csv(
'14-ENE-21','date date',map('dateFormat','dd-MMM-yy','locale','ES')
).date as date
""").show()
+----------+
| date|
+----------+
|2021-01-14|
+----------+
@PreMatching
@Provider
public class MyJaxRSContextProvider implements ContainerRequestFilter {
@Context
Providers providers;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setProperty("myProperty",property);
}
}
解决方法
需要考虑的事项:
-
在某些情况下,如果您将提供程序注册为实例,则可能不会发生注入。最好的办法是将提供者注册为一个类,或者只使用 Jersey 提供的扫描。
-
某些可注入对象是不可代理的,这将阻止将较小范围的服务注入到较大范围的服务中(例如:将范围对象请求到单例中)。在这种情况下,您应该将注入包裹在
javax.inject.Provider
@Inject private javax.inject.Provider<ContainerRequest> requestProvider; ... ContainerRequest request = requestProvider.get();