Omdat je RequestBody
. gebruikt met een application/json
inhoudstype, zal Spring zijn MappingJackson2HttpMessageConverter
gebruiken om uw JSON te converteren naar een object van uw type. Ongeacht de datumreeks die u opgeeft, 11/14
komt niet overeen met een van de vooraf geconfigureerde datumpatronen en kan deze daarom niet correct ontleden. De MappingJackson2HttpMessageConverter
, of meer specifiek de ObjectMapper
die het werk doet, weet niets over @DateTimeFormat
, een lente-annotatie.
U moet Jackson vertellen welk datumpatroon u wilt gebruiken. U kunt dit doen met een aangepaste datum-deserializer
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);
}
}
}
Annoteer vervolgens uw veld zodat Jackson weet hoe hij het moet deserialiseren.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Je zou @DateTimeFormat
kunnen gebruiken als u URL-gecodeerde formulierparameters gebruikte met @ModelAttribute
. Spring registreert een aantal converters die een String-waarde van een verzoekparameter kunnen converteren naar een Date
object. Dit wordt beschreven in de deocumentatie.