Mysql
 sql >> Base de données >  >> RDS >> Mysql

La requête envoyée par le client était syntaxiquement incorrecte en utilisant @DateTimeFormat

Parce que vous utilisez RequestBody avec une application/json type de contenu, Spring utilisera son MappingJackson2HttpMessageConverter pour convertir votre JSON en un objet de votre type. Cependant, la chaîne de date que vous fournissez, 11/14 ne correspond à aucun des modèles de date préconfigurés et ne peut donc pas l'analyser correctement. Le MappingJackson2HttpMessageConverter , ou plus spécifiquement le ObjectMapper qui fait le travail, ne sait rien de @DateTimeFormat , une annotation Spring.

Vous devrez indiquer à Jackson quel modèle de date vous souhaitez utiliser. Vous pouvez le faire avec un désérialiseur de date personnalisé

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

Ensuite, annotez simplement votre champ pour que Jackson sache comment le désérialiser.

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

Vous pouvez utiliser @DateTimeFormat si vous utilisiez des paramètres de formulaire encodés en URL avec @ModelAttribute . Spring enregistre certains convertisseurs capables de convertir une valeur String à partir d'un paramètre de requête en une Date objet. Ceci est décrit dans le documentation.