Mysql
 sql >> Database >  >> RDS >> Mysql

La richiesta inviata dal client era sintatticamente errata utilizzando @DateTimeFormat

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.