Как заставить Jackson игнорировать поле при сериализации, если его значение равно null?
Как можно настроить Jackson так, чтобы он игнорировал значение поля при сериализации, если значение этого поля равно null?
Например:
public class SomeClass {
// Какая аннотация Jackson позволяет пропустить это значение, если оно равно null,
// но сериализовать его в противном случае?
private String someValue;
}
5 ответ(ов)
Чтобы подробнее объяснить другие ответы: если вам нужно контролировать исключение null-значений на уровне отдельных полей, аннотируйте нужное поле (или, альтернативно, аннотируйте геттер этого поля).
Пример: здесь только fieldOne
будет исключен из JSON, если он равен null. fieldTwo
всегда будет включен в JSON, независимо от того, равен ли он null.
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
Чтобы исключить все null-значения в классе по умолчанию, аннотируйте сам класс. Аннотации на уровне полей или геттеров все еще могут использоваться для переопределения этого поведения, если это необходимо.
Пример: здесь fieldOne
и fieldTwo
будут исключены из JSON, если они равны null, поскольку это поведение по умолчанию, установленное аннотацией класса. Однако fieldThree
переопределит это значение по умолчанию и будет всегда включен за счет аннотации на поле.
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
ОБНОВЛЕНИЕ
Вышеизложенное касается Jackson 2. Для предыдущих версий Jackson вам нужно использовать:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
вместо
@JsonInclude(JsonInclude.Include.NON_NULL)
Если это обновление полезно, пожалуйста, проголосуйте за ответ ZiglioUK ниже, он упомянул об аннотации новой версии Jackson 2 задолго до того, как я обновил свой ответ, чтобы использовать ее!
С использованием Jackson версии > 1.9.11 и < 2.x вы можете использовать аннотацию @JsonSerialize
, чтобы добиться нужного результата:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
Эта аннотация позволяет сериализовать объекты, исключая поля, значение которых равно null
.
В Jackson 2.x вы можете использовать аннотацию @JsonInclude
следующим образом:
@JsonInclude(JsonInclude.Include.NON_NULL)
Эта аннотация гарантирует, что поля с значением null
не будут сериализоваться в JSON.
Вы можете использовать следующую конфигурацию маппера:
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
Начиная с версии 2.5, вы можете использовать:
mapper.setSerializationInclusion(Include.NON_NULL);
Вы можете установить application.properties
следующим образом:
spring.jackson.default-property-inclusion=non_null
Или использовать application.yaml
:
spring:
jackson:
default-property-inclusion: non_null
Дополнительную информацию можно найти в официальной документации Spring Boot.
Jackson с JSON: Неузнанное поле, не помеченное как проигнорируемое
Игнорирование новых полей в JSON-объектах с помощью Jackson
Как установить Java 8 на Mac
Почему в RecyclerView отсутствует onItemClickListener()?
Что значит 'synchronized'?