Джексон WRAPPER_OBJECT Переопределить - PullRequest
0 голосов
/ 22 октября 2018

Я хочу обновить версию Jackson, которую я использую для сериализации Json, с 2.8.x до 2.9.x, но я сталкиваюсь с одной проблемой, связанной с WRAPPER_OBJECT.

В настоящее время у меня есть переопределениедля AsWrapperTypeSerializer , который выполняет поиск заданного объекта и записывает оболочку, только если он существует в списке, в противном случае он просто записывает начальный объект (например, "jsonObj": {"key": "value"} какв отличие от "jsonObj": {"jsonObj": {"key": "value"}})

@Override
public void writeTypePrefixForObject(Object value, JsonGenerator jgen) throws IOException {
    if (topLevelObjects.contains(value.getClass())) {
        super.writeTypePrefixForObject(value, jgen);
    } else {
        jgen.writeStartObject();
    }
}

Я делаю то же самое для десериализации.Проблема в том, что с 2.9.0 Джексон устарел writeTypePrefixForObject , и я пытаюсь найти лучший способ добиться того же результата без этого метода.

Может кто-нибудь предложить способЯ могу достичь этого?Один из способов, который я нашел, это переопределить метод writeTypePrefix , как показано ниже, но у меня есть неприятное ощущение, что должен быть лучший способ, чем этот?

@Override   
public WritableTypeId writeTypePrefix(JsonGenerator g,
        WritableTypeId idMetadata) throws IOException {
    if (topLevelObjects.contains(idMetadata.forValue.getClass())) {
        return super.writeTypePrefix(g, idMetadata);
    } else {
        idMetadata.include = Inclusion.PAYLOAD_PROPERTY;
        return super.writeTypePrefix(g, idMetadata);
    }
}

Любая помощь будет признательна.

Спасибо

...