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.