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

Программисты JAVA общаются здесь
Anonymous
Как удалить нулевые значения, сгенерированные пользовательским сериализатором Джексона?

Сообщение Anonymous »

Для следующего класса:

Код: Выделить всё

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Account {

[... A lot of serialized properties]

@JsonSerialize(nullsUsing = JacksonSpringSpelSerializer.class, using = JacksonSpringSpelSerializer.class)
@JsonView(View.Contract.class)
@Value("#{@contractService.getActiveContract(#this)}")
public Contract activeContract;

}
В основном свойство activeContract имеет значение null, и его значение оценивается только тогда, когда предоставлен правильный @JsonView, значение вычисляется с помощью выражения Spring Spel, все делается в пользовательском сериализаторе JacksonSpringSpelSerializer.

Все работает, как ожидалось, НО вычисленное значение иногда может быть нулевым, что нормально, и в итоге я получаю json вот так:

Код: Выделить всё

{
[... All properties],
"activeContract": null
}
Проблема в том, что я не хочу, чтобы в возвращаемом json были нулевые свойства. @JsonInclude(JsonInclude.Include.NON_EMPTY) игнорируется, когда для свойства установлен пользовательский сериализатор.

Покопавшись немного, я обнаружил, что пользовательский сериализатор вызывается BeanPropertyWriter.serializeAsField(), который содержит:

Код: Выделить всё

    if (value == null) {
if (_nullSerializer != null) {
gen.writeFieldName(_name);
_nullSerializer.serialize(null, gen, prov);
}
return;
}
Итак, имя поля записывается gen.writeFieldName(_name); до фактического вызова пользовательского сериализатора, и я не нашел подходящего способа предотвратить такое поведение или удалить нулевые свойства, генерируемые пользовательским сериализатором.

Есть ли правильный способ добиться такого результата? Буду очень рад любым советам :D

Спасибо

Вернуться в «JAVA»