在 Spring Boot 2.4 上使用 Jersey 2.3。我有 2 个 JAX-RS 提供程序。其中一个实现了 ContainerRequestFilter(PreMatching),另一个扩展了 JacksonJaxbJsonProvider(来自 jackson-jaxrs-json-provider)。
我将 ContainerRequestFilter 中的属性设置到 ContainerRequestContext 上。然后我尝试使用@Context 将 ContainerRequestContext 注入到另一个 JAX-RS Provider 中。但是这种注入总是无效的。
如果我使用 @Context 将相同的对象注入到 JAX-RS 资源中,Jersey 会注入它。不知道我在这里缺少什么。非常感谢任何帮助。
@PreMatching
@Provider
public class MyJaxRSContextProvider implements ContainerRequestFilter {
@Context
Providers providers;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setProperty("myProperty", property);
}
}
@Provider
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.WILDCARD)
public class MyJsonJaxRSProvider extends JacksonJaxbJsonProvider {
@Context
ContainerRequestContext requestContext;
@Override
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return true;
}
@Override
public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException {
//requestcontext is always null
requestContext.getProperty("myProperty");
}
}