java - Jackson JSON 使用 JAVA BEAN 映射 JSON 键

标签 java json java-8 jackson

我正在使用 Jackson JSON LIB 2.8,并且我正在使用 Json.mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);

但有时我需要映射一些具有两个不同名称的字段,例如

POJO 具有属性 buildindg ,我需要将其映射到 buildingUidBUILDING 取决于 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/

相关文章:

java - JSON Jackson 将多个键反序列化到同一字段中

java - 混淆 Java 泛型错误与 Map 和 Collector

java - 将字符串转换为 java.util.Stream<Character>

java - 启动 Spring Boot 应用程序时出错

java - 在java中读取json文件中json对象数组的属性

java - 将 Map 转换为 XML 而不使用 JAXB

android - Android使用带有列表 Activity 的JSON强制关闭并显示错误

java - java中流的管道如何像IntPipeline一样工作

java - Google 应用内购买返回错误代码 6

java - 下载后maven将插件存储在哪里?