Fordi du bruger RequestBody
med en application/json
indholdstype, vil Spring bruge sin MappingJackson2HttpMessageConverter
at konvertere din JSON til et objekt af din type. Men den datostreng, du angiver, 11/14
matcher ikke nogen af de forudkonfigurerede datomønstre og kan derfor ikke parse det korrekt. MappingJackson2HttpMessageConverter
, eller mere specifikt ObjectMapper
der gør jobbet, ved ikke noget om @DateTimeFormat
, en forårsanmærkning.
Du bliver nødt til at fortælle Jackson, hvilket datomønster du vil bruge. Du kan gøre det med en brugerdefineret dato-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);
}
}
}
Så skal du blot kommentere dit felt, så Jackson ved, hvordan man deserialiserer det.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Du kan bruge @DateTimeFormat
hvis du brugte url-kodede formularparametre med @ModelAttribute
. Spring registrerer nogle konvertere, der kan konvertere en strengværdi fra en anmodningsparametre til en Date
objekt. Dette er beskrevet i deokumentering.