Eftersom du använder RequestBody
med en application/json
innehållstyp kommer Spring att använda sin MappingJackson2HttpMessageConverter
för att konvertera din JSON till ett objekt av din typ. Men datumsträngen du anger, 11/14
matchar inte något av de förkonfigurerade datummönstren och kan därför inte analysera det korrekt. MappingJackson2HttpMessageConverter
, eller mer specifikt ObjectMapper
som gör jobbet, vet ingenting om @DateTimeFormat
, en vårkommentar.
Du måste berätta för Jackson vilket datummönster du vill använda. Du kan göra det med en anpassad datumdeserializer
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);
}
}
}
Anteckna sedan helt enkelt ditt fält så att Jackson vet hur man deserialiserar det.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Du kan använda @DateTimeFormat
om du använde url-kodade formulärparametrar med @ModelAttribute
. Spring registrerar några omvandlare som kan konvertera ett strängvärde från en begärandeparametrar till ett Date
objekt. Detta beskrivs i deokumentering.