将Java对象转换为JsonNode,并在每个请求中更改SerializationConfig

时间:2017-12-23 12:41:25

标签: java serialization jackson objectmapper

我正在尝试将Java对象转换为JsonNode,如下所示。

mapper.setConfig(mapper.getSerializationConfig().with(contextAttributes));
mapper.valueToTree(object);

有一个objectMapper实例。 因此,对于每个请求,objectMapper序列化配置都有变化。这会导致并发问题,因为一个线程可能会覆盖前一个线程所设置的映射器的配置。我无法为每个请求创建一个新的ObjectMapper实例。我不能创建它的副本,因为根据ObjectMapper javadoc创建ObjectMapper的副本与创建新实例一样昂贵。

那么转换的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

这似乎是使用ObjectWriter的情况,根据其javadoc是

  

用于序列化参数的序列化配置

您可以从ObjectMapper创建实例并添加如下的专用配置:

ObjectWriter writer = mapper.writer(contextAttributes);
writer.writeValue(responseOutputStream, object);

遗憾的是,ObjectWriter类并不包含将输出写入JsonNode的简便方法。如果你真的需要结果不是字符串,你可以把它读成这样的树:

StringWriter sw = new StringWriter();
writer.writeValue(sw, object);

JsonNode jsonNode = mapper.readTree(sw.toString());