gpt4 book ai didi

java - 在 lombok Builder 中使用 Jackson、@JsonIdentityInfo 和 @JsonDeserialize 时出现 UnrecognizedPropertyException

转载 作者:行者123 更新时间:2023-11-30 05:52:13 25 4
gpt4 key购买 nike

我正在尝试序列化和反序列化一个非常大的对象图。为了减少生成的 JSON 的大小,我想我应该使用 Jackson 的 @JsonIdentityInfo 注释,它似乎非常适合这个特定的用例。

但是,当我添加它时,它就会爆炸。难的。示例代码如下:

主类

@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 test = Main.builder()
.name("Root")
.main("One", Main.builder()
.name("One")
.build())
.main("Two", Main.builder()
.name("Two")
.build())
.main("Three", Main.builder()
.name("Three")
.build())
.build();

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

@JsonPOJOBuilder(withPrefix = "")
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"
}

如果您注释掉 @JsonIdentityInfo 注释,代码将按预期工作,但我不太明白为什么。非常感谢任何帮助。

最佳答案

反序列化由 @JsonIdentityInfo 添加的 @id 字段时失败。您需要处理@id字段。

@JsonIgnoreProperties 添加到您的构建器将阻止其失败。

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

就像将 @id 添加到您的构建器一样

@JsonPOJOBuilder(withPrefix = "")
public static class MainBuilder {
private int id;
@JsonProperty(value="@id")
public MainBuilder id() {
this.id = id;
return this;
}
}

关于java - 在 lombok Builder 中使用 Jackson、@JsonIdentityInfo 和 @JsonDeserialize 时出现 UnrecognizedPropertyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com