【问题标题】:Parsing to Object api fields like eMail, bNumber, iKindCd causes null value解析到对象 api 字段,如电子邮件、bNumber、iKindCd 导致空值
【发布时间】:2021-12-01 23:10:02
【问题描述】:

我尝试将来自 Api 的响应解析为我的自定义对象。

大多数字段都已正确解析,但名称如下的字段除外:eMail、iKindName、bNumber、uTypeName、iStartDT、iKindCd、uTypeCd(第一个小写字母,第二个大写字母)

如果我使用我的自定义对象 ResponseV2,那么在这样的字段中我有空值。 如果我使用对象类型而不是 ResponseV2 - 字段 eMail、iKindName、bNumber、uTypeName、iStartDT、iKindCd、uTypeCd 不为空

我的 ReponseV2 中的那些字段(模式:第一个小写字母和第二个大写字母)有什么问题?我应该在这里使用一些注释,比如@JsonProperty?

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
public class ResultV2 implements Serializable {
    private String country;
    private String federationNumber;
    private String city;
    private String regon;
    private String managerSurname;
    private String countryCd;
    private String pib;
    private String institutionUuid;
    private String lNumber;
    private String siTypeName;
    private String managerName;
    private String ministryNumber;
    private String eMail;
    private String supervisingInstitutionID;
    private String nip;
    private String street;
    private String www;
    private String espAddress;
    private String voivodeship;
    private String id;
    private String iKindName;
    private String federationComposition;
    private String lastRefresh;
    private String postalCd;
    private String bNumber;
    private String panNumber;
    private List<BranchesV2> branches;
    private String krs;
    private String supervisingInstitutionName;
    private String iLiqStartDT;
    private String eunNumber;
    private String uTypeName;
    private String institutionUid;
    private String phone;
    private String iStartDT;
    private String iLiqDT;
    private String name;
    private String iKindCd;
    private String siTypeCd;
    private String yearPib;
    private String uTypeCd;
    private String dataSource;
    private String voivodeshipCode;
    private String status;
    private String statusCode;
}

【问题讨论】:

    标签: java api parsing


    【解决方案1】:

    Lombok @Data 注解生成setter方法为

    public void setEMail(final String eMail) {
        this.eMail = eMail;
    }
    

    然而 json mapper 期望 setter 方法使用小写字母 e,如下例所示,因此它找不到该方法。

    public void seteMail(final String eMail) {
        this.eMail = eMail;
    }
    

    只需在这些字段上使用 JsonProperty,如 @JsonProperty("eMail")。它会工作得很好。

    下面是关于它为什么会这样工作的详细解释:Why does Jackson 2 not recognize the first capital letter if the leading camel case word is only a single letter long?

    【讨论】:

      【解决方案2】:

      我有解决方案:如果我有,它可以工作

      @JsonProperty ("eMail") private String eMail;
      

      而不是

      private String eMail;
      

      但是为什么呢?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2015-12-06
        • 2020-02-07
        • 2020-06-12
        • 1970-01-01
        • 2012-01-01
        • 2012-09-14
        相关资源
        最近更新 更多