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.