我使用ElasticSearch来存储与对象发生的事件相关的一些数据,跟踪和跟踪模型。为此,我使用JAXB使用XSD文件生成de model类。 我可以将数据保存在ES上,轻松地将XML格式的数据转换为POJO,之后转换为JSON。 我遇到的问题是获取数据。我试图在Web服务上使用相同的逻辑JSON到POJO(使用JAXB)和POJO到XML。像那样:
JAXBContext jc = JAXBContext.newInstance(EPCISDocumentType.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
unmarshaller.setProperty("eclipselink.json.include-root", true);
String eventJSON = elasticEvent.getSpecific("event", "raw", eventID);
String附带了预期的事件,但是当我尝试转换为POJO时,对象只有最外层的类(EPCISDocumentType),但内容为0。我这样想:
StreamSource eventStream = new StreamSource(new StringReader(eventJSON));
EPCISDocumentType foundEvent = unmarshaller.unmarshal(eventStream,EPCISDocumentType.class).getValue();
问题是为什么会发生这种情况,我使用完全相同的库来制作Marshal,但是我无法将其解组回到相同的内容。
答案 0 :(得分:0)
我使用ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)进行编组和解组。它更容易使用。 见下文:
ObjectMapper mapper = new ObjectMapper();
//Get the json as String
String objectAsJsonString= mapper.writeValueAsString(foundEvent);
//Create the object from the String
EPCISDocumentType foundEvent = mapper.readValue(objectAsJsonString,EPCISDocumentType.class);
当你有要编组/解组的对象列表时,只有将列表放在包装器中时它才有效。
杰克逊也比jaxb更有表现力。 检查这些测试:http://tuhrig.de/jaxb-vs-gson-and-jackson/