MismatchedInputException при использовании Джексона, @JsonIdentityInfo и @JsonDeserialize с помощью lombok Builder - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь сериализовать и десериализовать большой граф объектов.Чтобы уменьшить размер сгенерированного JSON, я подумал, что буду использовать аннотацию @JsonIdentityInfo Джексона, которая, как я могу прочитать, кажется, хорошо работает для этого конкретного варианта использования.

Однако, когда я добавляю, что это дуетвверх, всякий раз, когда он пытается десериализовать объект, с которым сталкивался ранее.Я предполагаю, что это потому, что мне не хватает какой-то конфигурации для SimpleObjectIdResolver, но я не могу понять, что я делаю неправильно.Пример кода следующий:

Main.class

@Data
@Builder
@JsonDeserialize(builder = Main.MainBuilder.class)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
public class Main {

    private final String name;
    @Singular
    private final Map<String, Main> mains;

    public static void main(String[] args) throws IOException {
        var one = Main.builder().name("one").build();
        var test = Main.builder()
                .name("Root")
                .main("one", one)
                .main("two", Main.builder()
                        .name("two")
                        .main("one", one)
                        .build())
                .build();

        var om = new ObjectMapper();
        var result = om.writeValueAsString(test);
        System.out.println(result);
        var back = om.readValue(result, Main.class);
        System.out.println(back);
        System.out.println(back.mains.get("Two").mains.get("one") == back.mains.get("one"));
    }

    @JsonPOJOBuilder(withPrefix = "")
    @JsonIgnoreProperties(ignoreUnknown=true)
    public static class MainBuilder {
    }
}

build.gradle

plugins {
    id 'java'
    id 'application'
}

repositories {
    jcenter()
    mavenCentral()
}

sourceCompatibility = 11
targetCompatibility = 11

mainClassName = 'dk.acto.Main'


dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.7'
    annotationProcessor "org.projectlombok:lombok:1.18.0"
}
...