如何将JSON映射到JAXB对象?

时间:2012-06-18 16:28:49

标签: java xml web-services rest

我有一些传入的JSON需要映射到JAXB对象。我是否需要将JSON转换为XML然后填充JAXB对象,还是可以将JSON直接映射到对象?在任何一种情况下,有人可以告诉我这样做的最佳库是什么?

4 个答案:

答案 0 :(得分:0)

gson是一个灵活的库,可以将JSON字符串转换为等效的Java对象,包括预先存在的Java对象。

答案 1 :(得分:0)

如果你正在使用杰克逊,你可以在这里查看JacksonJAXBA注释http://wiki.fasterxml.com/JacksonJAXBAnnotations

答案 2 :(得分:0)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

  

我是否需要将JSON转换为XML,然后填充JAXB   对象,或者我可以将JSON直接映射到对象吗?

在将输入传递给JAXB(JSR-222)实现之前,不需要将JSON转换为XML。如果您正在使用Jersey实现(可能还有其他实现),您可以像下面那样设置JAX-RS方法,JAXB将用于XML和JSON处理。

@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{id}")
public Customer read(@PathParam("id") long id) {
    return entityManager.find(Customer.class, id);
}

JAX-RS实现具有MessageBodyReader / MessageBodyWriter机制,允许您覆盖默认转换。我不知道Gson对JAXB注释有任何支持。 Jackson是一个提供support for a subset of JAXB annotationsmaybe regrettably)的对象到JSON库。 EclipseLink MOXy是一个JAXB实现,已经extended to support JSON-binding。有关在JAX-RS环境中使用它的示例,请参阅:

答案 3 :(得分:0)

作为一种轻量级方法,您可以通过StAX使用StAXON - JSON https://github.com/beckchr/staxon/。 StAXON提供对JAXB的支持,请参阅https://github.com/beckchr/staxon/wiki/Using-JAXB

使用StAXON,将JAXB注释模型绑定到JSON就像

一样简单
JsonXMLMapper<Person> mapper = new JsonXMLMapper<Person>(Person.class);
Person person = mapper.readObject(input);
...
mapper.writeObject(output, person);

StAXON还支持JAX-RS,请参阅https://github.com/beckchr/staxon/wiki/Using-JAX-RS