杰克逊:有没有办法将POJO直接序列化为树模型?

Gee*_*Jan 30 serialization json pojo jackson

我正在寻找一种方法将一些POJO直接转换为Jackson TreeModel.我知道存在从POJO到JSON-String的转换,并且支持TreeModel到JSON-String - hovewer我正在寻找POJO到TreeModel的转换.有办法吗?

用例如下:

  • 服务器端模板是使用Mustache的Java实现完成的.这使用Jackson的TreeModel.
  • 在那之后,我需要在客户端使用TreeModel的精简版本,所以我希望能够首先过滤TreeModel,将其序列化为JSON,然后将其发送到客户端进行进一步处理.

理想情况下,这涉及两个序列化步骤.但是,在我的解决方法中,我目前正在使用三个 - 您可以在此处看到:

map = // a map of  pojos with jackson annotations

//pojo >> JSON
StringWriter w = new StringWriter();    
objectmapper.writeValue(new JsonFactory().createJsonGenerator(w), map);
String json = w.toString();
w.close();

//JSON >> Treemodel
JsonNode tree = GenericJcrDTO.mapper.readTree(json);
//filter tree here

//treemodel >>JSON
StringWriter w = new StringWriter();
GenericJcrDTO.mapper.writeValue(new JsonFactory().createJsonGenerator(w), tree);
json = w.toString();
w.close();
Run Code Online (Sandbox Code Playgroud)

任何人?

Gee*_*Jan 49

回答我自己的问题:

JsonNode node = objectMapper.valueToTree(map);
Run Code Online (Sandbox Code Playgroud)

  • 确实.通常,'ObjectMapper.convertValue(sourceOb,dstType)'可用于各种转换,包括POJO到树的情况. (2认同)
  • 似乎在版本1.6之前没有添加ObjectMapper.valueToTree,所以来自@StaxMan的'ObjectMapper.convertValue(sourceObj,JsonNode.class)替代方案对于我们这些尚未升级的人来说非常棒! (2认同)
  • @dirkt 使用 ObjectNode 而不是 JsonNode: ```mapper.valueToTree<ObjectNode>(map)``` (2认同)