将两个不同的JSON的字段名称映射到一个POJO属性

时间:2014-03-19 19:03:30

标签: json jackson

我有两个来自不同来源的相同格式的JSON字符串,但其中一个有camelcase,一个有snakecase,如何使用POJO将它们映射到同一个Jackson字段? 例如:

{ "fieldName": "abcd"}

{ "field_name": "abcd"}

2 个答案:

答案 0 :(得分:3)

您应该创建两个setter方法:

class Entity {

    private String fieldName;

    public String getFieldName() {
        return fieldName;
    }

    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }

    public void setField_name(String field_name) {
        this.fieldName = field_name;
    }
}

答案 1 :(得分:1)

您可以使用@JsonCreator注释指定如何构建对象。

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyPojo {
    private final String fieldName;

    // Jackson version
    @JsonCreator
    public static MyPojo of(
            @JsonProperty("field_name") final String fieldName1,
            @JsonProperty("fieldName") final String fieldName2) {
        final String name = fieldName1 != null ? fieldName1 : fieldName2;
        return of(name);
    }

    // Programmatic version that you can use from code
    public static MyPojo of(
            @JsonProperty("fieldName") final String fieldName) {
        return new MyPojo(fieldName);
    }

    private MyPojo(final String fieldName) {
        this.fieldName = fieldName;
    }

    public String fieldName() {
        return fieldName;
    }
}

您的 POJO 将整洁干净(没有重复的字段),并且创建代码很好地分开。