Protože používáte RequestBody s application/json typ obsahu, Spring použije svůj MappingJackson2HttpMessageConverter převést váš JSON na objekt vašeho typu. Nicméně řetězec data, který zadáte, 11/14 neodpovídá žádnému z předem nakonfigurovaných vzorů data, a proto jej nemůže správně analyzovat. MappingJackson2HttpMessageConverter nebo přesněji ObjectMapper který to dělá, neví nic o @DateTimeFormat , jarní anotace.
Budete muset Jacksonovi sdělit, jaký vzor data chcete použít. Můžete tak učinit pomocí vlastního deserializátoru data
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);
}
}
}
Pak jednoduše označte své pole, aby Jackson věděl, jak jej deserializovat.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Můžete použít @DateTimeFormat pokud jste používali parametry formuláře zakódované v adrese URL s @ModelAttribute . Spring registruje některé převodníky, které dokážou převést hodnotu String z parametrů požadavku na Date objekt. Toto je popsáno v dedokumentace.