我正在使用 Jackson JSON LIB 2.8,并且我正在使用 Json.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);
但有时我需要映射一些具有两个不同名称的字段,例如
POJO 具有属性 buildindg
,我需要将其映射到 buildingUid
或 BUILDING
取决于 JSON 中存在的键,它们是否以任何方式这样做?
示例:
public class Building extends Bean {
private UUID id;
private String name;
}
我有两个不同的来源,一个是我的数据库,它返回以下格式的 JSON:
{
"ID":"build",
"NAME":"name1"
}
我的另一个来源是客户:
{
"UID" : "build",
"name" : "name1"
}
正如你所看到的,我的问题是将 id 与 UID 和 ID 一起映射,我设法将第一个映射为:
Json.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);
但另一个来源是 UID,当我执行类似的操作时,我不知道如何自动映射它
Json.encode(Building.toString());
最佳答案
可以使用用@JsonSetter注释的多个setter
尝试这样的事情:
public class Building extends Bean {
private String id;
private String name;
@JsonGetter("id")
public String getId() {
return id;
}
@JsonSetter("id")
public void setId(String id) {
this.id = id;
}
@JsonSetter("UID")
public void setUID(String id) {
setId(id);
}
@JsonGetter("name")
public String getName() {
return name;
}
@JsonSetter("name")
public void setName(String name) {
this.name = name;
}
@JsonSetter("NAME")
public void setUpperCaseName(String name) {
setName(name);
}
}
但这有点糟糕(解决方案不是动态的)。
关于java - Jackson JSON 使用 JAVA BEAN 映射 JSON 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770226/