Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die vom Client gesendete Anfrage war mit @DateTimeFormat syntaktisch falsch

Weil Sie RequestBody verwenden mit einer application/json Inhaltstyp verwendet Spring seinen MappingJackson2HttpMessageConverter um Ihr JSON in ein Objekt Ihres Typs zu konvertieren. Die von Ihnen angegebene Datumszeichenfolge ist jedoch 11/14 mit keinem der vorkonfigurierten Datumsmuster übereinstimmt und daher nicht korrekt analysiert werden kann. Der MappingJackson2HttpMessageConverter , oder genauer gesagt der ObjectMapper das macht den Job, weiß nichts über @DateTimeFormat , eine Frühlingsanmerkung.

Sie müssen Jackson mitteilen, welches Datumsmuster Sie verwenden möchten. Sie können dies mit einem benutzerdefinierten Datums-Deserialisierer

tun
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);
        }
    }
}

Kommentieren Sie dann einfach Ihr Feld, damit Jackson weiß, wie es deserialisiert wird.

@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;

Sie könnten @DateTimeFormat verwenden wenn Sie URL-codierte Formularparameter mit @ModelAttribute verwendet haben . Spring registriert einige Konverter, die einen String-Wert aus einem Anfrageparameter in ein Date umwandeln können Objekt. Dies ist in der beschrieben Dokumentation.