带有Json Array的com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException

时间:2019-01-14 09:58:51

标签: jackson

我正在从API读取JSON,转换为POJO,执行一些逻辑,然后将POJO写入JSON文件。

这是从API输入的JSON的样子

String jsonStr = "[{\"LastUpdatedBy\":\"Bug 101510: VMukkanagoudar\",\"IATACountryCode\":\"US\",\"MetroCodeBool\":false,\"AirportName\":\"Sawyer County\",\"Latitude\":46,\"CityName\":\"Hayward\",\"MajorAirportBool\":false,\"Longitude\":-91,\"StatusCode\":\"A\",\"DisplayNameLocal\":\"Hayward, WI (HYR-Sawyer County)\",\"DisplayNameInternational\":\"Hayward, WI, United States (HYR-Sawyer County)\",\"UpdateDate\":\"2009-03-06 20:44:00.0\",\"AirportCode\":\"HYR\",\"AirportID\":5396808,\"RegionName\":\"Wisconsin\",\"IdenticalMetroCodeBool\":false,\"ExternalName\":\"HYR\",\"CountryCode\":\"USA\"}]";

这是一个带有一个Json对象的JSONArray。

POJO看起来像这样

@JsonIgnoreProperties(ignoreUnknown = true)
public class AirConfig {

    String airportCode;
    Integer airportId;
    Boolean metroCodeBool;

    @JsonProperty("airportCode")
    public String getAirportCode() {
        return airportCode;
    }

    @JsonProperty("AirportCode")
    public void setAirportCode(String airportCode) {
        this.airportCode = airportCode;
    }

    @JsonProperty("airportId")
    public Integer getAirportId() {
        return airportId;
    }

    @JsonProperty("AirportID")
    public void setAirportId(Integer airportId) {
        this.airportId = airportId;
    }

    @JsonProperty("metroCodeBool")
    public Boolean getMetroCodeBool() {
        return metroCodeBool;
    }

    @JsonProperty("MetroCodeBool")
    public void setMetroCodeBool(Boolean metroCodeBool) {
        this.metroCodeBool = metroCodeBool;
    }
}

在setter和getter上我有一个不同的@JsonProprty值,因为从API读取(即反序列化)时字段的名称与将POJO写入文件(即序列化)时的字段名称不同。

这就是我读取字符串的方式

ObjectMapper mapper = new ObjectMapper();      
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
TypeReference<List<AirConfig>> typeRef = new TypeReference<List<AirConfig>>() {};

List<AirConfig> configs = mapper.readValue(jsonStr, typeRef);

//Logic

但我一直收到此错误-

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "airportCode" (class org.json.JSONObject), not marked as ignorable (0 known properties: ])

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您有重复的属性airportCodeAirportCode,我只需将@JsonProperty("AirportCode")添加到airportCode

@JsonProperty("AirportCode")
String airportCode;

public String getAirportCode() {
    return airportCode;
}

public void setAirportCode(String airportCode) {
    this.airportCode = airportCode;
}