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.