Как можно настроить Джексона на игнорирование значения поля во время сериализации, если значение этого поля равно нулю.
Например:
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;
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
:; почему-то ваша аннотация была недоступна.@JsonInclude
нотация не работает, но это работает как шарм:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
(я использую Jackson 1.9.12 с Spring 3.2.2.)@JsonSerialize
синтаксиса на@JsonInclude
. Старый синтаксис устарел.С Jackson> 1.9.11 и <2.x используйте
@JsonSerialize
аннотацию, чтобы сделать это:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
источник
@JsonSerialize(using = FooSerializer.class, include = JsonSerialize.Inclusion.NON_NULL)
не работает Обнуляемые значения сериализуются.Просто чтобы расширить другие ответы - если вам нужно контролировать пропуск пустых значений для каждого поля, аннотируйте соответствующее поле (или альтернативно аннотируйте «получатель» поля).
пример - здесь только
fieldOne
из json будет опущено, если оно пустое.fieldTwo
всегда будет включен независимо от того, является ли он нулевым.Чтобы опустить все нулевые значения в классе по умолчанию, аннотируйте класс. Аннотации для каждого поля / получателя все еще можно использовать для переопределения этого значения по умолчанию, если это необходимо.
пример - здесь
fieldOne
иfieldTwo
будет опущен из json, если они равны нулю, соответственно, потому что это значение по умолчанию установлено аннотацией класса.fieldThree
однако переопределит значение по умолчанию и будет всегда включено из-за аннотации на поле.ОБНОВИТЬ
Выше для Джексона 2 . Для более ранних версий Джексона вам необходимо использовать:
вместо
Если это обновление полезно, пожалуйста, подтвердите ответ ZiglioUK ниже, он указал на более новую аннотацию Jackson 2 задолго до того, как я обновил свой ответ, чтобы использовать его!
источник
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
устарелаВ Jackson 2.x используйте:
источник
com.fasterxml.jackson.annotation
- у Джексона 1.xorg.codehaus.jackson.annoation
Вы можете использовать следующую конфигурацию картографа:
С версии 2.5 вы можете использовать:
источник
getSerializationConfig()
говорит:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
mapper.setSerializationInclusion(Include.NON_NULL);
Вы можете установить
application.properties
:или
application.yaml
:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
источник
в моем случае
заставил это работать.
источник
{ }
null, которое бессмысленно передает идиому Java для потребителя. то же самое с AtomicReference - потребителю все равно, как разработчик решил обеспечить безопасность потоков во внутреннем представлении ответа.должно сработать.
Include.NON_EMPTY
указывает, что свойство сериализовано, если его значение не равно нулю и не пусто.Include.NON_NULL
указывает, что свойство сериализовано, если его значение не равно нулю.источник
JsonInclude.Include.NON_EMPTY
- достаточно, поскольку он охватывает дело NOT_NULLЕсли вы хотите добавить это правило ко всем моделям в Jackson 2.6+, используйте:
источник
В Spring Boot вы можете настроить Джексона
ObjectMapper
непосредственно через файлы свойств.Пример
application.yml
:Возможные значения:
Подробнее: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
источник
Это будет работать весной загрузки 2.0.3+ и Джексона 2.0+
источник
@JsonInclude(JsonInclude.Include.NON_NULL)
сработало для меня в Spring boot 2.1.2 и в аннотациях Jackson 2.9.0Для Джексона 2.5 используйте:
источник
Это беспокоило меня в течение достаточно долгого времени, и я наконец нашел проблему. Проблема была из-за неправильного импорта. Ранее я использовал
Который был устарел. Просто замените импорт на
и использовать его как
источник
Глобальная конфигурация, если вы используете Spring
источник
public Jackson2ObjectMapperBuilder serializationInclusion(JsonInclude.Include serializationInclusion) { this.serializationInclusion = serializationInclusion; return this; }
; Следует использовать больший радиус перечисления включения. например, NON_ABSENT включает в себя NON_NULL и NON_EMPTY включает в себя оба. Таким образом, это должен быть толькоbuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
документЕсли вы пытаетесь сериализовать список объектов, и один из них является нулевым, вы в конечном итоге включите нулевой элемент в JSON, даже если
приведет к:
чтобы получить это:
можно сделать что-то вроде:
СОВЕТ: Если вы используете DropWizard, вы можете получить информацию о том,
ObjectMapper
что вы используете на Джерси, используяenvironment.getObjectMapper()
источник
У нас много ответов на этот вопрос. Этот ответ может быть полезен в некоторых случаях. Если вы хотите игнорировать нулевые значения, вы можете использовать NOT_NULL на уровне класса. как показано ниже
Иногда вам может понадобиться игнорировать пустые значения, такие как инициализация arrayList, но в этом списке нет элементов. В это время используется аннотация NOT_EMPTY для игнорирования этих пустых полей значений.
источник
Джексон 2.x + использовать
источник
.withSerializationInclusion(JsonInclude.Include.NON_NULL)
вместо этого правильно?getSerializationConfig()
говорит:Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
Кроме того, вы должны изменить свой подход при использовании Map myVariable, как описано в документации, для удаления нулей:
источник
Первый случай
Случай два
Если
someString
ноль, он будет проигнорирован в обоих случаях. ЕслиsomeString
есть "", то это только будет проигнорировано в случае два.То же самое для
List = null
илиList.size() = 0
источник