Perché stai usando RequestBody
con un application/json
tipo di contenuto, Spring utilizzerà il suo MappingJackson2HttpMessageConverter
per convertire il tuo JSON in un oggetto del tuo tipo. Comunque la stringa di data che fornisci, 11/14
non corrisponde a nessuno dei modelli di data preconfigurati e pertanto non può analizzarlo correttamente. Il MappingJackson2HttpMessageConverter
, o più specificamente l'ObjectMapper
che fa il lavoro, non sa nulla di @DateTimeFormat
, un'annotazione di primavera.
Dovrai dire a Jackson quale modello di data vuoi usare. Puoi farlo con un deserializzatore di data personalizzato
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);
}
}
}
Quindi annota semplicemente il tuo campo in modo che Jackson sappia come deserializzarlo.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Puoi usare @DateTimeFormat
se stavi utilizzando parametri del modulo con codifica URL con @ModelAttribute
. Spring registra alcuni convertitori che possono convertire un valore String da un parametro di richiesta in un Date
oggetto. Questo è descritto nel deocummentazione.