首页 > 解决方案 > Jackson objectMapper 将不同的 json 属性映射到同一个 pojo

问题描述

我有一个非常简单的 json,我试图将它映射到一个对象。

JSON:

[
    {
        "cust_lpid": "0119b9f7f99ad2161de7b0b",
        "cust_uid": "soumavtestflow"
    }
]

我的映射器类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomerSegmentRequest {

    @JsonProperty("LPID")
    String cust_lpid;
    @JsonProperty("UserId")
    String cust_uid;

    public String getCust_lpid() {
        return cust_lpid;
    }
    public void setCust_lpid(String cust_lpid) {
        this.cust_lpid = cust_lpid;
    }
    public String getCust_uid() {
        return cust_uid;
    }
    public void setCust_uid(String cust_uid) {
        this.cust_uid = cust_uid;
    }
}

当我做一个

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
LPIDCustIDMapper[] custSegResp = objectMapper.readValue(responseBody,CustomerSegmentRequest [].class);

我没有在 custSegResp 中填充任何值。

但是,当我删除@JsonProperty它时,它可以工作。我需要 json 属性名称来映射传入请求,因此不想创建单独的映射类。有没有办法达到同样的效果?

标签: javajsonjackson

解决方案


使用@JsonAlias

@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomerSegmentRequest {

   @JsonAlias({"cust_lpid", "LPID" })
   String cust_lpid;

   @JsonAlias({"cust_uid", "UserId" })
   String cust_uid;

   public String getCust_lpid() {
      return cust_lpid;
   }

   public void setCust_lpid(String cust_lpid) {
      this.cust_lpid = cust_lpid;
   }

    public String getCust_uid() {
      return cust_uid;
   }

    public void setCust_uid(String cust_uid) {
       this.cust_uid = cust_uid;
   }
}

推荐阅读