Karena Anda menggunakan RequestBody
dengan application/json
jenis konten, Spring akan menggunakan MappingJackson2HttpMessageConverter
untuk mengonversi JSON Anda menjadi objek tipe Anda. Bagaimanapun string tanggal yang Anda berikan, 11/14
tidak cocok dengan salah satu pola tanggal yang telah dikonfigurasi sebelumnya dan karena itu tidak dapat menguraikannya dengan benar. MappingJackson2HttpMessageConverter
, atau lebih tepatnya ObjectMapper
itu berhasil, tidak tahu apa-apa tentang @DateTimeFormat
, anotasi Musim Semi.
Anda harus memberi tahu Jackson pola tanggal mana yang ingin Anda gunakan. Anda dapat melakukannya dengan deserializer tanggal khusus
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);
}
}
}
Kemudian cukup beri anotasi pada bidang Anda sehingga Jackson tahu cara membatalkan serialisasi.
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
Anda dapat menggunakan @DateTimeFormat
jika Anda menggunakan parameter formulir yang disandikan url dengan @ModelAttribute
. Spring mendaftarkan beberapa konverter yang dapat mengonversi nilai String dari parameter permintaan menjadi Date
obyek. Hal ini dijelaskan dalam deokumentasi.