Конвертировать Java-объект в JsonNode с изменением SerializationConfig для каждого запроса
Я пытаюсь преобразовать Java-объект в JsonNode следующим образом.
mapper.setConfig(mapper.getSerializationConfig().with(contextAttributes));
mapper.valueToTree(object);
Существует один экземпляр objectMapper. Таким образом, для каждого запроса есть изменение в конфигурации сериализации objectMapper. Это вызывает проблемы параллелизма, так как один поток может перезаписать конфигурацию mapper, установленную предыдущим. Я не могу создать новый экземпляр ObjectMapper для каждого запроса. Я не могу создать даже его копию, так как в соответствии с javadoc ObjectMapper создание копии ObjectMapper так же дорого, как создание нового экземпляра.
Так что же это лучший способ конвертировать?
1 ответ
Это похоже на случай использования 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());