Parce que vous utilisez RequestBody
avec une application/json
type de contenu, Spring utilisera son MappingJackson2HttpMessageConverter
pour convertir votre JSON en un objet de votre type. Cependant, la chaîne de date que vous fournissez, 11/14
ne correspond à aucun des modèles de date préconfigurés et ne peut donc pas l'analyser correctement. Le MappingJackson2HttpMessageConverter
, ou plus spécifiquement le ObjectMapper
qui fait le travail, ne sait rien de @DateTimeFormat
, une annotation Spring.
Vous devrez indiquer à Jackson quel modèle de date vous souhaitez utiliser. Vous pouvez le faire avec un désérialiseur de date personnalisé
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);
}
}
}
Ensuite, annotez simplement votre champ pour que Jackson sache comment le désérialiser.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Vous pouvez utiliser @DateTimeFormat
si vous utilisiez des paramètres de formulaire encodés en URL avec @ModelAttribute
. Spring enregistre certains convertisseurs capables de convertir une valeur String à partir d'un paramètre de requête en une Date
objet. Ceci est décrit dans le documentation.