Jackson ObjectMapper игнорирует все свойства без аннотаций

Моя цель - преобразовать jsonObject в класс. Я хочу добавить только те поля, которые аннотированы в классе. Пример: объект json содержит 50 полей. Класс имеет 4 поля. Я хочу отобразить только точные 4 поля без добавления 46 игнорируемых дополнений в классе.

JSON:

{
  "id": "1",
  "name": "John",
  "Address": "Some Address 7009",
}

Класс:

public static class User {
    Integer id;
    String name;

    public User (@JsonProperty("id")Integer id, @JsonProperty("name")String name {
            this.id= id;
            this.name= name;
    }
    ....
}

Класс пользователя не имеет адресного поля. Моя цель - исключить его, потому что у него нет аннотации.


person IntoTheDeep    schedule 04.10.2016    source источник
comment
Вам нужно добавить @JsonIgnore для оставшихся свойств, которые вам не нужны.   -  person Nimesh    schedule 04.10.2016
comment
Вы прочитали мой вопрос?   -  person IntoTheDeep    schedule 04.10.2016
comment
Это невозможно. Вы можете либо назначить @JsonIgnore для оставшихся свойств, либо вы можете изменить ключ json, который не соответствует свойству объекта, и наоборот, все, что возможно.   -  person Nimesh    schedule 04.10.2016
comment
Вы можете использовать фильтры, чтобы игнорировать определенные поля. Взгляните на @JsonFilter   -  person Rainier Diaz    schedule 04.01.2021


Ответы (1)


Аннотируйте свой класс с помощью @JsonIgnoreProperties. , как показано ниже:

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    ...
}

Когда ignoreUnknown равно true, все неопознанные свойства (то есть нет принимающих их сеттеров или создателей) игнорируются без предупреждений (хотя обработчики неизвестных свойств, если они есть, все равно будут вызываться) без исключения.

person cassiomolin    schedule 04.10.2016
comment
Он используется, когда любое новое свойство, недоступное в классе - person Nimesh; 04.10.2016
comment
TeodorKolev имеет 40 свойств в классе и 40 ключей в json, и он хочет, чтобы только 4 свойства были преобразованы в свойство объекта Java. Остальное должно быть значением по умолчанию, таким как null, 0 или что-то еще. Предоставление аннотации на уровне класса не решит эту проблему. - person Nimesh; 04.10.2016
comment
@Naman Ваши комментарии действительно глупы. Вы должны прочитать вопрос. - person cassiomolin; 04.10.2016
comment
@ Наман, я сказал тебе прочитать вопрос. Я набрал, что у меня есть 4 поля в классе - person IntoTheDeep; 04.10.2016
comment
Возможно, вы используете старую версию библиотеки. Я использую последнюю версию Jackson, и мне не нужно упоминать это свойство вручную. BDW удачи вы получили свой ответ. - person Nimesh; 04.10.2016
comment
@Naman На момент написания этой статьи самая последняя версия Джексона — 2.8.3 (посмотрите здесь). Я только что протестировал с Jackson 2.8.3, и мое решение работает как шарм. - person cassiomolin; 04.10.2016
comment
@CássioMazzochiMolin, вы правы, он всегда обратно совместим, но добавлять эту аннотацию в последнюю версию не требуется. Я также добился этого без использования какой-либо аннотации - person Nimesh; 04.10.2016