com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException с массивом Json - PullRequest
0 голосов
/ 14 января 2019

Я читаю JSON из API, преобразовываю в POJO, выполняю некоторую логику и затем записываю POJO в файл JSON.

Вот как выглядит вход JSON из API

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\"}]";

Это JSONArray с одним объектом Json внутри.

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;
    }
}

У меня есть другое значение @JsonProprty для setter и getter, потому что имя поля, когда я читаю из 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 голосов
/ 14 января 2019

У вас есть повторяющиеся свойства airportCode и AirportCode, я бы просто добавил @JsonProperty("AirportCode") к airportCode:

@JsonProperty("AirportCode")
String airportCode;

public String getAirportCode() {
    return airportCode;
}

public void setAirportCode(String airportCode) {
    this.airportCode = airportCode;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...