Конвертировать 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());
Другие вопросы по тегам