8

Как заставить Jackson игнорировать поле при сериализации, если его значение равно null?

30

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

Например:

public class SomeClass {
   // Какая аннотация Jackson позволяет пропустить это значение, если оно равно null, 
   // но сериализовать его в противном случае? 
   private String someValue; 
}

5 ответ(ов)

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)

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

1

С использованием Jackson версии > 1.9.11 и < 2.x вы можете использовать аннотацию @JsonSerialize, чтобы добиться нужного результата:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

Эта аннотация позволяет сериализовать объекты, исключая поля, значение которых равно null.

0

В Jackson 2.x вы можете использовать аннотацию @JsonInclude следующим образом:

@JsonInclude(JsonInclude.Include.NON_NULL)

Эта аннотация гарантирует, что поля с значением null не будут сериализоваться в JSON.

0

Вы можете использовать следующую конфигурацию маппера:

mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);

Начиная с версии 2.5, вы можете использовать:

mapper.setSerializationInclusion(Include.NON_NULL);
0

Вы можете установить application.properties следующим образом:

spring.jackson.default-property-inclusion=non_null

Или использовать application.yaml:

spring:
  jackson:
    default-property-inclusion: non_null

Дополнительную информацию можно найти в официальной документации Spring Boot.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь