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.