У меня возникли проблемы с десериализацией даты JSON с Джерси и Джексоном.
У меня есть класс, например: Элемент:
public class Item {
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private Date itemDate;
// other String values and getters/setters
}
Конечная точка выглядит следующим образом:
@Path("/createItem")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes(MediaType.APPLICATION_JSON)
public Response newItem(Item i) {
System.out.println(i.getItemDate());
}
Если я POST следующие JSON-данные
{
"itemDate": "2015-03-01"
}
i.getItemDate()
всегда возвращает ноль.Если я не использую формат даты по умолчанию yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
, я пытался изменить формат на yyyy-MM-dd
, но я не могу этого сделать.Я попробовал @JsonDeserialize
с пользовательским классом в соответствии с примерами на этом сайте.
Стоит также отметить, что при использовании пользовательского @JsonDeserializer он никогда не достигнет какой-либо точки останова в пользовательском классе, как это былоигнорируя аннотации, например:
@JsonDeserialiser(using = MyCustomDateFormat.class)
Если у меня есть точка останова в CustomJsonDateDeserializer
, она никогда не попадет.
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
Нужно ли что-то еще делать для регистрации обработчика десериализации,или он должен работать с одним из подходов выше?