sql >> Base de Datos >  >> RDS >> Mysql

La solicitud enviada por el cliente era sintácticamente incorrecta usando @DateTimeFormat

Porque estás usando RequestBody con una application/json tipo de contenido, Spring usará su MappingJackson2HttpMessageConverter para convertir su JSON en un objeto de su tipo. Sin embargo, la cadena de fecha que proporcione, 11/14 no coincide con ninguno de los patrones de fecha preconfigurados y, por lo tanto, no puede analizarlo correctamente. El MappingJackson2HttpMessageConverter , o más específicamente el ObjectMapper que hace el trabajo, no sabe nada sobre @DateTimeFormat , una anotación de Spring.

Deberá decirle a Jackson qué patrón de fecha desea usar. Puede hacerlo con un deserializador de fecha personalizado

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

Luego simplemente anote su campo para que Jackson sepa cómo deserializarlo.

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

Podrías usar @DateTimeFormat si estuviera utilizando parámetros de formulario codificados en URL con @ModelAttribute . Spring registra algunos convertidores que pueden convertir un valor de cadena de un parámetro de solicitud en una Date objeto. Esto se describe en el documentación.