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.