Не удалось преобразовать json в класс pojo, получая исключение com.faster xml .jackson.databind.ex c .UnrecognizedPropertyException - PullRequest
1 голос
/ 02 апреля 2020

Это мой JsonObject

JSONObject input = new JSONObject("{\n" + 
                "   \"ColumnNames\":[\"col1\", \"col2\", \"col3\", \"col4\", \"col5\"]\n" + 
                "}");

Мой класс POJO

public class RequestClass {
    private List<String> ColumnNames;

    public void setColumnNames(List<String> ColumnNames) {
        this.ColumnNames = ColumnNames;
    }

    public List<String> getColumnNames() {
        return this.ColumnNames;
    }
}

Попытка преобразовать JsonObject в объект класса pojo с помощью ObjectMapper, как показано ниже -

ObjectMapper mapper = new ObjectMapper();
//mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

RequestClass request = null;
try {
    request = mapper.readValue(input.toString(), RequestClass.class);
} catch (Exception e) {
    e.printStackTrace();
} 

Получение исключения в выводе

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ColumnNames" (class RequestClass), not marked as ignorable (one known property: "columnNames"])
 at [Source: {"ColumnNames":["col1","col2","col3","col4","col5"]}; line: 1, column: 17] (through reference chain: RequestClass["ColumnNames"])

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Название частной собственности с именем ColumnNames на самом деле не имеет значения. Свойство найдено путем самоанализа, глядя на добытчиков и сеттеров. По соглашению, если у вас есть методы с именами getColumnNames и setColumnNames, они определяют свойство с именем columnNames (строчные буквы c).

Таким образом, у вас есть два варианта:

  • измените имя свойства в JSON на columnNames, или
  • используйте аннотацию для переопределения интроспективного поведения по умолчанию.

Последнее достигается путем используя @ JsonProperty на геттере и сеттере следующим образом:

    @JsonProperty("ColumnNames")
    public List<String> getColumnNames() {
        return this.ColumnNames;
    }
0 голосов
/ 02 апреля 2020

Глядя на исключение, похожее на pojo, вы упомянули ColumnNames, а в json вы упомянули columnNames (несоответствие регистра), хотя вы правильно определили его в примере json над. Пожалуйста, проверьте, есть ли несоответствие регистра в именах полей.

...