Десериализовать со значением по умолчанию, при использовании AutoValue и Джексона? - PullRequest
0 голосов
/ 01 ноября 2019

Как часть тела POST, мы ожидаем уникальный идентификатор для запроса RequestId (мы помечаем его значением, добавляя к нему префикс, что я мог бы сделать с помощью специального десериализатора). Но, если наш потребитель услуг не предоставляет, мы хотели бы сгенерировать его, используя UUID.randomUUID().

@AutoValue
@JsonDeserialize(builder = AutoValue_RequestBody.Builder.class)
public abstract class RequestBody {

     @JsonProperty("key")
     public abstract String getKey();

     @JsonProperty("requestId")
     @Nullable
     public abstract String getRequestId();

     // Many other members...

    @AutoValue.Builder
    public static abstract class Builder {

         @JsonProperty("key")
         public abstract Builder setKey(String key);

         @JsonProperty("requestId")
         @Nullable
         @JsonDeserialize(using = ReqIdDeserializer.class)
         public abstract getRequestId(String requestId);

         public abstract RequestBody build();
    }
}

Десериализатор:

public String deserialize(JsonParser jsonParser, DeserializationContext ctxt) {
        String name = jsonParser.readValueAs(String.class);
        return "STAMP-" + StringUtils.defaultIfEmpty(name, UUID.randomUUID().toString());
}

Настроенный Deserializer не работает, если в теле сообщения отсутствует параметр. !

Есть ли способ добавить значение по умолчанию? т.е. когда пользователь передает

{
    key: "testing"
}

, я бы хотел, чтобы объект был похож на

RequestBody{key=testing, requestId=STAMP-2eeff31c-6824-445a-a13b-4aec9f7a4e81 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...