Как часть тела 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 }