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

时间:2012-03-01 06:19:35

标签: jersey cxf jax-rs

我正在看球衣的内部,关于它如何将简单的POJO转换为Json。 Jersey有一个接口Providers,它将提供给定类和mediaType的contextResolvers列表。一旦我们得到了contextResolver,我们就可以从中获取Context和Marshaller,它可以用来获取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);

通过上述方式,我们可以将任何具有有效上下文解析器的POJO转换为json。但问题是我们如何获得供应商的处理程序。

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

2 个答案:

答案 0 :(得分:1)

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

@Context Producers producers;

答案 1 :(得分:0)

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

您必须编写代码以在类路径中查找使用@Provider注释的类。