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.