Есть ли способ указать имя Root для UNWRAP_ROOT_VALUE при настройке ObjectMapper? - PullRequest
0 голосов
/ 14 января 2020

У меня есть сторонний 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 в качестве значения по умолчанию?

...