8

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

5

Как можно настроить 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.

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