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