本质上,我有一个将对象写为JSON的MessageBodyWriter,我希望能够根据处理请求的资源方法控制输出的某些方面。但是,@Provider类的默认生命周期是singleton(每个JVM一个),因此我无法注入某个配置对象的实例。这给我留下了两个明显的解决方法:
有没有办法改变提供商本身的生命周期?我正在使用泽西岛。
答案 0 :(得分:2)
不确定为什么需要基于每个请求的MessageBodyWriter提供程序。如果您只是想区分哪些方法与JSON输出和哪些不是,那么jersey-json
已经支持。
虽然@Provider
是单身人士。您仍然可以在其中使用每个请求对象,如下所示。
@Provider
public class StViewProcessor implements ViewProcessor<ST> {
......
@Context
HttpServletRequest request;
public void writeTo(ST st, Viewable viewable, OutputStream out)
throws IOException {
System.out.println(request.getRequestURI());
...
}
}
如果您想为每个请求注入实例,可以查看PerRequestTypeInjectableProvider
。这是关于它的link。
答案 1 :(得分:1)
JAX-RS 1.1规范requires that implementations support singleton providers and allows support for other lifecycles但并未提出其他任何建议。据我所知,纯粹的泽西岛并不支持单身人士之外的任何事情。使用the jersey-spring contrib module,您可以获得使用Spring作为Jersey的IoC容器(从中获取其资源和提供程序实例)的支持。我知道Spring支持多个生命周期,包括请求,但我不确定是否支持这种生命周期。{/ p>