gpt4 book ai didi

java - 如何根据每个请求配置 JAX-RS MessageBodyWriter?

转载 作者:行者123 更新时间:2023-12-01 23:50:44 27 4
gpt4 key购买 nike

本质上,我有一个将对象写入 JSON 的 MessageBodyWriter,并且我希望能够根据处理请求的资源方法来控制输出的某些方面。但是,@Provider 类的默认生命周期是单例(每个 JVM 一个),因此我无法注入(inject)某些配置对象的实例。这给我留下了两个明显的解决方法:

  1. 使用自定义注释:每次调用 writeTo(...) 都包含所调用方法的注释列表,因此我可以检查某些注释是否存在。然而,JAX-RS 方法已经充满了元编程。
  2. 使用 ThreadLocal 属性映射:假设每个线程一个请求,但这种方法稍微破坏了封装性。资源方法需要知道还有其他一些类正在寻找此 map 。

有没有办法改变Provider本身的生命周期?我正在使用 Jersey 。

最佳答案

不知道为什么您需要一个基于每个请求的 MessageBodyWriter Provider。如果您只是想区分哪些方法具有 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());
...
}


}

如果您想在每个请求中注入(inject)实例,您可以查看 PerRequestTypeInjectableProvider。这是link关于它。

关于java - 如何根据每个请求配置 JAX-RS MessageBodyWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com