У меня есть сторонний API, который предоставил некоторые базовые определения c DTO. Их API оборачивает все результаты значением «result» root. Я могу успешно развернуть ответы, включив DeserializationFeature.UNWRAP_ROOT_VALUE
и указав значение root в моем считывателе. Однако я искал более общий c способ сделать это на уровне ObjectMapper
, а не на уровне читателя.
Пример: stati c class Result {publi c Идентификатор строки; publi c String raw; publi c String ast; }
private ObjectMapper rootMapper()
{
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
return mapper;
}
@Test
public void testRootUsingExplicitConfig() throws Exception
{
Result result = new Result("id", "raw data", "ast info");
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer().withRootName("result");
String json = writer.writeValueAsString(result);
assertEquals("{\"result\":{\"id\":\"id\",\"raw\":\"raw data\",\"ast\":\"ast info\"}}", json);
ObjectReader reader = mapper.reader(Result.class).withRootName("result");
Result bean = reader.readValue(json);
assertNotNull(bean);
}
Я понимаю, что могу использовать @JsonRootName(value = "result")
в своем DTO, но в идеале я бы предпочел не изменять предоставленные ими классы.
Есть ли способ настроить ObjectMapper
, чтобы указать имя root в качестве значения по умолчанию?