निश्चित रूप से एक स्वचालित तरीका है जिसे क्रमबद्धता और डिसेरिएलाइज़ेशन कहा जाता है और आप इसे विशिष्ट एनोटेशन ( @JsonSerialize , @JsonDeserialize ) के साथ परिभाषित कर सकते हैं जैसा कि pb2q द्वारा भी उल्लेख किया गया है।
आप java.util.Date और java.util.Calendar ... और शायद JodaTime दोनों का उपयोग कर सकते हैं।
@JsonFormat एनोटेशन मेरे लिए काम नहीं के रूप में मैं चाहता था (यह है समय क्षेत्र समायोजित भिन्न मान पर) अक्रमांकन दौरान (क्रमांकन सही काम किया):
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "CET")
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Europe/Budapest")
यदि आप अनुमानित परिणाम चाहते हैं तो आपको @JsonFormat एनोटेशन के बजाय कस्टम धारावाहिक और कस्टम deserializer का उपयोग करने की आवश्यकता है। मुझे असली अच्छा ट्यूटोरियल और समाधान यहां मिला है http://www.baeldung.com/jackson-serialize-dates
दिनांक फ़ील्ड के लिए उदाहरण हैं, लेकिन मुझे कैलेंडर फ़ील्ड के लिए आवश्यक है, इसलिए यहां मेरा कार्यान्वयन है :
Serializer वर्ग:
public class CustomCalendarSerializer extends JsonSerializer<Calendar> {
public static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
public static final Locale LOCALE_HUNGARIAN = new Locale("hu", "HU");
public static final TimeZone LOCAL_TIME_ZONE = TimeZone.getTimeZone("Europe/Budapest");
@Override
public void serialize(Calendar value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
if (value == null) {
gen.writeNull();
} else {
gen.writeString(FORMATTER.format(value.getTime()));
}
}
}
Deserializer वर्ग:
public class CustomCalendarDeserializer extends JsonDeserializer<Calendar> {
@Override
public Calendar deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException, JsonProcessingException {
String dateAsString = jsonparser.getText();
try {
Date date = CustomCalendarSerializer.FORMATTER.parse(dateAsString);
Calendar calendar = Calendar.getInstance(
CustomCalendarSerializer.LOCAL_TIME_ZONE,
CustomCalendarSerializer.LOCALE_HUNGARIAN
);
calendar.setTime(date);
return calendar;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
और उपरोक्त वर्गों का उपयोग :
public class CalendarEntry {
@JsonSerialize(using = CustomCalendarSerializer.class)
@JsonDeserialize(using = CustomCalendarDeserializer.class)
private Calendar calendar;
// ... additional things ...
}
इस कार्यान्वयन का उपयोग क्रमबद्धता और डीरियलाइज़ेशन प्रक्रिया के निष्पादन के परिणामस्वरूप मूल मूल्य में लगातार होता है।
केवल @JsonFormat एनोटेशन का उपयोग करते हुए deserialization अलग-अलग परिणाम देता है जो मुझे लगता है कि लाइब्रेरी आंतरिक टाइमज़ोन डिफ़ॉल्ट सेटअप के कारण है जो आप एनोटेशन मापदंडों के साथ नहीं बदल सकते हैं (जो कि जैक्सन लाइब्रेरी के साथ मेरा अनुभव 2.5.3 और 2.6.3 संस्करण के साथ भी था)।