Weil Sie RequestBody
verwenden mit einer application/json
Inhaltstyp verwendet Spring seinen MappingJackson2HttpMessageConverter
um Ihr JSON in ein Objekt Ihres Typs zu konvertieren. Die von Ihnen angegebene Datumszeichenfolge ist jedoch 11/14
mit keinem der vorkonfigurierten Datumsmuster übereinstimmt und daher nicht korrekt analysiert werden kann. Der MappingJackson2HttpMessageConverter
, oder genauer gesagt der ObjectMapper
das macht den Job, weiß nichts über @DateTimeFormat
, eine Frühlingsanmerkung.
Sie müssen Jackson mitteilen, welches Datumsmuster Sie verwenden möchten. Sie können dies mit einem benutzerdefinierten Datums-Deserialisierer
tunpublic 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);
}
}
}
Kommentieren Sie dann einfach Ihr Feld, damit Jackson weiß, wie es deserialisiert wird.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Sie könnten @DateTimeFormat
verwenden wenn Sie URL-codierte Formularparameter mit @ModelAttribute
verwendet haben . Spring registriert einige Konverter, die einen String-Wert aus einem Anfrageparameter in ein Date
umwandeln können Objekt. Dies ist in der beschrieben Dokumentation.