С учетом конкретных требований, касающихся сериализации / десериализации поля, я бы предложил использовать пользовательский сериализатор / десериализатор.
public class CustomDateSerializer extends StdSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator generator, SerializerProvider provider)
throws IOException, JsonProcessingException {
// your implementation
}
}
public class CustomDateDeserializer extends StdDeserializer<Item> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
// your implementation
}
}
Тогда вы можете просто пометить createdDt
следующим образом:
public class MyMessage {
private String id;
private String name;
private Date createdDt;
@JsonCreator
public MyMessage(
@JsonProperty("id") String id,
@JsonProperty("name") String name,
@JsonProperty("createdDt") @JsonDeserialize(using = CustomDateDeserializer.class) @JsonSerialize(using = CustomDateSerializer.class) Date createdDt
) {
this.id = id;
this.name = name;
this.createdDt = createdDt;
}
}
Таким образом, вы поручаете Джексону использовать ваш конкретный сериализатор / десериализатор в определенном поле.
Если вы хотите, чтобы конфигурация применялась на уровне ObjectMapper
, вы можете добиться этого с помощью такой регистрации модуля. :
SimpleModule myModule = new SimpleModule();
myModule.addSerializer(Date.class, new CustomDateSerializer());
myModule.addDeserializer(Date.class, new CustomDateDeserializer());
objectMapper.registerModule(myModule);