Тъй като използвате RequestBody
с application/json
тип съдържание, Spring ще използва своя MappingJackson2HttpMessageConverter
за да конвертирате вашия JSON в обект от вашия тип. Въпреки това низът за дата, който предоставяте, 11/14
не съвпада с нито един от предварително конфигурираните модели за дата и следователно не може да го анализира правилно. MappingJackson2HttpMessageConverter
, или по-точно ObjectMapper
който върши работата, не знае нищо за @DateTimeFormat
, пролетна анотация.
Ще трябва да кажете на Джаксън кой модел на дата искате да използвате. Можете да направите това с персонализиран десериализатор на дата
public class CustomDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("MM/yy");
String date = jp.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new JsonParseException(e);
}
}
}
След това просто анотирайте полето си, така че Джаксън да знае как да го десериализира.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Можете да използвате @DateTimeFormat
ако сте използвали URL-кодирани параметри на формуляр с @ModelAttribute
. Spring регистрира някои преобразуватели, които могат да преобразуват стойност на низ от параметри на заявка в Date
обект. Това е описано в деокументация.