Ponieważ używasz RequestBody
z application/json
typ treści, Spring użyje swojego MappingJackson2HttpMessageConverter
aby przekonwertować Twój JSON na obiekt Twojego typu. Jednak podany ciąg daty, 11/14
nie pasuje do żadnego ze wstępnie skonfigurowanych wzorców dat i dlatego nie może ich poprawnie przeanalizować. MappingJackson2HttpMessageConverter
, a dokładniej ObjectMapper
to robi swoje, nie wie nic o @DateTimeFormat
, adnotacja wiosenna.
Musisz powiedzieć Jacksonowi, jakiego wzoru daty chcesz użyć. Możesz to zrobić za pomocą niestandardowego deserializatora daty
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);
}
}
}
Następnie po prostu opisz swoje pole, aby Jackson wiedział, jak je zdeserializować.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Możesz użyć @DateTimeFormat
jeśli używasz parametrów formularza zakodowanych w adresie URL z @ModelAttribute
. Spring rejestruje niektóre konwertery, które mogą konwertować wartość String z parametrów żądania na Date
obiekt. Jest to opisane w deokumentacja.