Установка значений по умолчанию к пустым полям при отображении с Jackson

Я пытаюсь отобразить некоторые объекты JSON на объекты Java с Jackson. Некоторые поля в объекте JSON обязательны (с которым я могу отметить @NotNull) и некоторые являются дополнительными.

После отображения с Jackson все поля, которые не установлены в объекте JSON, будут иметь нулевое значение в Java. Есть ли подобная аннотация к @NotNull это может сказать Jackson устанавливать значение по умолчанию на участника класса Java, в случае, если это является пустым?

Править: Для создания вопроса более ясным вот, некоторый пример кода.

Объект Java:

class JavaObject {
    @NotNull
    public String notNullMember;

    @DefaultValue("Value")
    public String optionalMember;
}

Объект JSON может быть также:

{
    "notNullMember" : "notNull"
}

или:

{
    "notNullMember" : "notNull",
    "optionalMember" : "optional"
}

@DefaultValue аннотации должны только показать то, что я спрашиваю. Это не реальная аннотация. Если объект JSON похож в первом примере, я хочу значение optionalMember быть "Value" и нет null. Существует ли аннотация, которая делает такую вещь?

59
задан 15 September 2013 в 01:05

1 ответ

Можно создать собственный JsonDeserializer и аннотировать то свойство @JsonDeserialize(as = DefaultZero.class)

, Например: настраивать BigDecimal для установки по умолчанию для ОБНУЛЕНИЯ:

public static class DefaultZero extends JsonDeserializer<BigDecimal> {
    private final JsonDeserializer<BigDecimal> delegate;

    public DefaultZero(JsonDeserializer<BigDecimal> delegate) {
        this.delegate = delegate;
    }

    @Override
    public BigDecimal deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        return jsonParser.getDecimalValue();
    }

    @Override
    public BigDecimal getNullValue(DeserializationContext ctxt) throws JsonMappingException {
        return BigDecimal.ZERO;
    }
}

И использование:

class Sth {

   @JsonDeserialize(as = DefaultZero.class)
   BigDecimal property;
 }
1
ответ дан 1 November 2019 в 12:30

Другие вопросы по тегам:

Похожие вопросы: