gpt4 book ai didi

java - Jackson JSON 处理器问题

转载 作者:行者123 更新时间:2023-11-29 06:16:22 25 4
gpt4 key购买 nike

几个小时以来,我一直在摸不着头脑:

Jsckson 反序列化 B 但在下面的 C 上炸弹:

BC 都是A 的子类,因此有一个setter getName。请注意,Name 中的大写 N 是故意的,这就是我的 JSON 的样子。反序列化 C 报错 Unrecognized field name Name,对于 B 没问题。

版本 1.7.2

ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().addMixInAnnotations(B.class, MixIn.class);
String json = "{\"Name\" : \"13\"}";
B b = m.readValue(json, B.class);
System.out.println(b.getName());
C c = m.readValue(json, C.class);
System.out.println(c.getName());

 public class A {
private int id ;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

public class B extends A {
private String address;

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}
}

 public class C extends A {
private String country;

public String getCountry() {
return country;
}

public void setCountry(String country) {
this.country = country;
}
}

 @JsonAutoDetect(fieldVisibility = Visibility.NONE,setterVisibility=Visibility.ANY)
abstract class MixIn {

@JsonProperty("Name")
public abstract void setName(String name);

@JsonProperty("Id")
public abstract void setId(int id);

}

最佳答案

这是因为与名为 setName 的 setter 匹配的默认 JSON 字段名称是 name,而不是 Name。这是 Java 属性名称约定。

反序列化对 B 有效,因为您已经引入了 mixin 来更改与 setName 匹配的字段名称。

你不能也为 C 引入 mixin 吗?

关于java - Jackson JSON 处理器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942477/

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