Я пытаюсь сериализовать и десериализовать большой граф объектов.Чтобы уменьшить размер сгенерированного 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"
}