क्योंकि आप RequestBody
. का उपयोग कर रहे हैं एक application/json
. के साथ सामग्री प्रकार, स्प्रिंग अपने MappingJackson2HttpMessageConverter
का उपयोग करेगा अपने JSON को अपने प्रकार की वस्तु में बदलने के लिए। हालाँकि आपके द्वारा प्रदान की जाने वाली दिनांक स्ट्रिंग, 11/14
किसी भी पूर्व-कॉन्फ़िगर दिनांक पैटर्न से मेल नहीं खाता है और इसलिए यह इसे सही ढंग से पार्स नहीं कर सकता है। MappingJackson2HttpMessageConverter
, या अधिक विशेष रूप से ObjectMapper
जो काम करता है, @DateTimeFormat
के बारे में कुछ नहीं जानता , एक स्प्रिंग एनोटेशन।
आपको जैक्सन को यह बताना होगा कि आप किस तिथि पैटर्न का उपयोग करना चाहते हैं। आप एक कस्टम दिनांक deserializer के साथ ऐसा कर सकते हैं
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);
}
}
}
फिर बस अपने क्षेत्र को एनोटेट करें ताकि जैक्सन को पता चले कि इसे कैसे डीरियलाइज करना है।
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date test;
आप उपयोग कर सकते हैं @DateTimeFormat
यदि आप @ModelAttribute
. के साथ url-एन्कोडेड फ़ॉर्म पैरामीटर का उपयोग कर रहे थे . स्प्रिंग कुछ कन्वर्टर्स को पंजीकृत करता है जो अनुरोध पैरामीटर से स्ट्रिंग मान को Date
. में परिवर्तित कर सकते हैं वस्तु। यह इसमें वर्णित है विसंक्रमण।