অবশ্যই সিরিয়ালাইজেশন এবং ডিসরিয়ালাইজেশন নামে একটি অটোমেটেড উপায় রয়েছে এবং আপনি পিবি 2 কিউ দ্বারা উল্লিখিত নির্দিষ্ট টীকাগুলি ( @ জসনসরিয়ালাইজ , @ জসনডিজারালাইজেশন ) দিয়ে এটি সংজ্ঞায়িত করতে পারেন ।
আপনি java.util.Date এবং java.util.Cocolate উভয়ই ব্যবহার করতে পারেন ... এবং সম্ভবত জোডটাইমও ব্যবহার করতে পারেন।
@ জেসনফরমেট টীকাগুলি আমার জন্য যেমনটি চেয়েছিল তেমন কাজ করেনি (এটি টাইমজোনকে বিভিন্ন মানের সাথে সামঞ্জস্য করেছে ) ডেসিরিয়ালেসনের সময় (সিরিয়ালাইজেশন নিখুঁতভাবে কাজ করেছিল):
@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 টীকা পরিবর্তে কাস্টম সিরিয়ালাইজার এবং কাস্টম ডিসরিয়ালাইজার ব্যবহার করতে হবে। আমি এখানে সত্যিকারের ভাল টিউটোরিয়াল এবং সমাধান পেয়েছি http://www.baeldung.com/jackson-seialize-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 ...
}
এই বাস্তবায়নটি ব্যবহার করে ক্রমিকায়ন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়াটি ক্রমাগতভাবে মূল মানের ফলাফল করে।
কেবলমাত্র @ জসনফর্ম্যাট টীকাটি ডিসরিয়ালাইজেশন ব্যবহার করা বিভিন্ন ফলাফল দেয় বলে আমি মনে করি লাইব্রেরির অভ্যন্তরীণ টাইমজোন ডিফল্ট সেটআপের কারণে আপনি এনটোটেশন প্যারামিটারগুলি দিয়ে কী পরিবর্তন করতে পারবেন না (এটি আমার জ্যাকসন লাইব্রেরির ২.৩.৩ এবং ২.6.৩ সংস্করণ হিসাবেও ছিল)।