সংক্ষিপ্ত সংবেদনশীল এমন এনাম মানগুলিতে আমি কীভাবে JSON স্ট্রিংকে ডিসরিয়ালাইজ করতে পারি? (জ্যাকসন ডেটাবাইন্ড ব্যবহার করে)
JSON স্ট্রিং:
[{"url": "foo", "type": "json"}]
এবং আমার জাভা পোজো:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
এই ক্ষেত্রে, JSON এর সাথে deserialization "type":"json"
যেখানে ব্যর্থ হবে সেখানে ব্যর্থ "type":"JSON"
হবে। তবে আমি "json"
নামকরণের কারণেও কাজ করতে চাই ।
পজো সিরিয়ালিকৃত করার ফলে উপরের ক্ষেত্রেও ফলাফল হয় "type":"JSON"
আমি @JsonCreator
এবং @ জেসনগেটর ব্যবহার করার কথা ভেবেছিলাম :
@JsonCreator
private Endpoint(@JsonProperty("name") String url, @JsonProperty("type") String type) {
this.url = url;
this.type = DataType.valueOf(type.toUpperCase());
}
//....
@JsonGetter
private String getType() {
return type.name().toLowerCase();
}
এবং এটা কাজ করে. তবে আমি ভাবছিলাম যে এর চেয়ে ভাল দ্রাবক আছে কিনা কারণ এটি আমার কাছে হ্যাকের মতো দেখাচ্ছে।
আমি একটি কাস্টম ডিসরিওলাইজারও লিখতে পারি তবে আমি অনেকগুলি বিভিন্ন POJO পেয়েছি যা এনামগুলি ব্যবহার করে এবং এটি বজায় রাখা শক্ত হবে।
যথাযথ নামকরণ কনভেনশন সহ এনামগুলিকে সিরিয়ালাইজ এবং ডিসরিয়ালাইজ করার আরও ভাল উপায়ের পরামর্শ কেউ দিতে পারেন?
আমি চাই না জাভাতে আমার এনামগুলি ছোট হাতের হয়ে উঠুক!
এখানে আমি ব্যবহার করেছি এমন কিছু পরীক্ষার কোড:
String data = "[{\"url\":\"foo\", \"type\":\"json\"}]";
Endpoint[] arr = new ObjectMapper().readValue(data, Endpoint[].class);
System.out.println("POJO[]->" + Arrays.toString(arr));
System.out.println("JSON ->" + new ObjectMapper().writeValueAsString(arr));