Простой способ сериализации нулей как нулей в Джексоне - PullRequest
0 голосов
/ 07 мая 2020

Часть моего ответа - это некоторые поля BigDecimal, и я хотел бы сериализовать эти c поля в 0, когда они равны нулю. Есть ли в библиотеке Джексона простой способ добиться этого (например, с помощью аннотации полей или чего-то подобного) или здесь требуется специальный сериализатор?

1 Ответ

1 голос
/ 07 мая 2020

Вам нужен настраиваемый сериализатор (попробуйте расширить StdSerializer, NullSerializer имеет частный конструктор по умолчанию ...).

Если вы хотите, чтобы все пустые поля в классе обрабатывались таким образом, вы можете просто аннотировать цель class:

@JsonSerialize(nullsUsing = NullsToZeroSerializer.class)

Если вы хотите сделать это во всем проекте, создайте SimpleModule для ObjectMapper и добавьте свой сериализатор в этот модуль, а модуль в ObjectMapper .

Если вы хотите сделать это только для BigDecimal, может быть достаточно просто проверить значение, переданное методу serialize, с помощью instanceof.

public class NullToZeroSerializer extends StdSerializer<Object> {

protected NullToZeroSerializer(Class<Object> t) {
    super(t);
}

@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
    if (value instanceof BigDecimal) {
        gen.writeNumber(0);
    } else {
        gen.writeNull();
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...