Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A solicitação enviada pelo cliente estava sintaticamente incorreta usando @DateTimeFormat


Porque você está usando RequestBody com um application/json tipo de conteúdo, o Spring usará seu MappingJackson2HttpMessageConverter para converter seu JSON em um objeto do seu tipo. No entanto, a string de data que você fornece, 11/14 não corresponde a nenhum dos padrões de data pré-configurados e, portanto, não pode analisá-lo corretamente. O MappingJackson2HttpMessageConverter , ou mais especificamente o ObjectMapper que faz o trabalho, não sabe nada sobre @DateTimeFormat , uma anotação do Spring.

Você precisará informar a Jackson qual padrão de data deseja usar. Você pode fazer isso com um desserializador de data 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);
        }
    }
}

Em seguida, basta anotar seu campo para que Jackson saiba como desserializá-lo.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;

Você pode usar @DateTimeFormat se você estivesse usando parâmetros de formulário codificados por URL com @ModelAttribute . O Spring registra alguns conversores que podem converter um valor String de um parâmetro de solicitação em um Date objeto. Isso está descrito no deocumentação.