Вам нужен настраиваемый сериализатор (попробуйте расширить 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();
}
}
}