Я пытаюсь отобразить некоторые объекты 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
. Существует ли аннотация, которая делает такую вещь?
Можно создать собственный 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;
}