Вопрос-ответ

How to tell Jackson to ignore a field during serialization if its value is null?

Как сказать Джексону игнорировать поле во время сериализации, если его значение равно null?

Как можно настроить Jackson на игнорирование значения поля во время сериализации, если значение этого поля равно null.

Например:

public class SomeClass {
// what jackson annotation causes jackson to skip over this value if it is null but will
// serialize it otherwise
private String someValue;
}
Переведено автоматически
Ответ 1

Чтобы подавить сериализацию свойств с нулевыми значениями с помощью Jackson > 2.0, вы можете настроить ObjectMapper напрямую или использовать @JsonInclude аннотацию:

mapper.setSerializationInclusion(Include.NON_NULL);

или:

@JsonInclude(Include.NON_NULL)
class Foo
{
String bar;
}

В качестве альтернативы вы могли бы использовать @JsonInclude в геттере, чтобы атрибут отображался, если значение не равно null.

Более полный пример доступен в моем ответе на Как предотвратить сериализацию null значений внутри Map и null полей внутри bean через Jackson.

Ответ 2

Просто чтобы расширить другие ответы - если вам нужно контролировать пропуск значений 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)

Если это обновление полезно, пожалуйста, поддержите ответ ЗиглиуКА ниже, в нем указана более новая аннотация Jackson 2 задолго до того, как я обновил свой ответ, чтобы использовать его!

Ответ 3

С помощью Jackson > 1.9.11 и < 2.x для этого используйте @JsonSerialize аннотацию:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

Ответ 4

В Jackson 2.x используйте:

@JsonInclude(JsonInclude.Include.NON_NULL)
java jackson