Jersey 使用JAX-RS将POJO解析为JSON,而不使用任何特定的实现代码

Jersey 使用JAX-RS将POJO解析为JSON,而不使用任何特定的实现代码,jersey,cxf,jax-rs,Jersey,Cxf,Jax Rs,我在研究jersey的内部结构,了解它如何将简单的POJO转换为Json。Jersey有一个接口提供程序,它将提供给定类和mediaType的ContextResolver列表。一旦我们得到contextResolver,我们就可以从中获得上下文和封送器,它可以用来获取json字符串,如下所示 假设我们想要序列化Pojo“obj”。代码如下所示 Providers ps = ... ContextResolver<JAXBContext> resolver = ps.getConte

我在研究jersey的内部结构,了解它如何将简单的POJO转换为Json。Jersey有一个接口提供程序,它将提供给定类和mediaType的ContextResolver列表。一旦我们得到contextResolver,我们就可以从中获得上下文和封送器,它可以用来获取json字符串,如下所示

假设我们想要序列化Pojo“obj”。代码如下所示

Providers ps = ...
ContextResolver<JAXBContext> resolver = ps.getContextResolver(obj.getClass(), MediaType.APPLICATION_JSON_TYPE);
JAXBContext ctx = resolver.getContext(obj.getClass());
ctx.createMarshaller().marshal(obj, writer);
Providers-ps=。。。
ContextResolver解析器=ps.getContextResolver(obj.getClass(),MediaType.APPLICATION\u JSON\u TYPE);
JAXBContext ctx=resolver.getContext(obj.getClass());
ctx.createMarshaller().marshal(obj,writer);
通过上述方法,我们可以将任何具有有效上下文解析器的POJO转换为json。但问题是我们如何获得提供者的处理程序

PS:我还没有编译这段代码,但从我从源代码中可以看到这就是jersey所做的。关于我为什么要做这些事情,以便我们可以使用JAX-RSAPI直接将对象转换为JSON。而不是使用任何实现代码。

所以你的问题是:“如何找到提供者”


必须编写代码才能在类路径中找到用@Provider注释的类。

在JAX-RS资源clas中,使用@Context注释告诉Jersey注入生产者:

@Context Producers producers;

对但泽西已经做到了这一点。那么有没有一种方法可以访问这些提供者(这里的提供者我指的是javax.ws.rs.ext.Providers)。像我建议的那样扫描类路径将是一次性操作;在应用程序引导期间完成。顺便说一句,你考虑过使用[GSon]吗?我没有用过,但项目描述似乎很有趣。