У меня есть проект Spring
, где в методе контроллера у меня есть @RequestBody Object obj
в качестве одного из параметров.
Объект имеет Date
поля, которые с пользовательскими JSON Serializer
и пользовательскими JSON Deserializer
реализованы с использованием @JsonDeserializer
и @JsonSerializer
и двух классов.
Когда я отправляю запрос в метод контроллера, Spring
вызывает поле десериализатора и десериализации строки Джексона объекта в Date
.
Когда десериализатор десериализует строку даты и возвращает объект Date
, я хочу, чтобы он проанализировал строку в соответствии с форматом, заданным в поле format
объекта (т. Е. Формат также указан во входных данных), и создайте Date
возразить соответственно. Как это можно реализовать?
class MyObject{
private String format; //field containing the format
private Date currentDate;// this field should get formatted according to the 'format' field value
@JsonSerialize(using = CustomJSONSerializer.class)
public Date getCurrentDate(){
return this.currentDate;
}
@JsonDeserialize(using = CustomJsonDeserializer.class)
public void setCurrentDate(Date currentDate){
this.currentDate=currentDate;
}
}
class CustomJsonDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
//this format I want it to receive from the input as well i.e from the Object's format named instance variable.
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
try {
return simpleDateFormat.parse(jp.getText());
} catch (ParseException e) {
//catch exception
}
}
Можем ли мы использовать JsonParser
или DeserializationContext
для решения этой проблемы?