解析为对象 api 字段,如电子邮件、bNumber、iKindCd 会导致空值

Parsing to Object api fields like eMail, bNumber, iKindCd causes null value

我尝试解析从 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;
}

我有解决办法:如果我有

就可以了
@JsonProperty ("eMail") private String eMail;

而不是

private String eMail;

但是为什么呢?

Lombok @Data 注释正在生成 setter 方法作为

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

但是 json 映射器希望 setter 方法使用小写字母 e,如下例所示,因此它无法找到该方法。

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

只需在这些字段上使用 @JsonProperty("eMail") 之类的 JsonProperty。它会很好用。

这里详细解释了为什么它会这样工作: