मैं JSON स्ट्रिंग को कैसे निष्क्रिय कर सकता हूं जिसमें Enum मान शामिल हैं जो केस असंवेदनशील हैं? (जैक्सन डाटबिंड का उपयोग करके)
JSON स्ट्रिंग:
[{"url": "foo", "type": "json"}]
और मेरे जावा POJO:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
इस मामले में, JSON के साथ deserializing "type":"json"
जहां के रूप में विफल हो जाएगा"type":"JSON"
काम करेगा। लेकिन मैं "json"
कन्वेंशन कारणों के नामकरण के लिए भी काम करना चाहता हूं ।
POJO को सीरियलाइज़ करने से ऊपरी मामले में भी परिणाम मिलता है "type":"JSON"
मैंने सोचा @JsonCreator
और @JsonGetter का उपयोग कर रहा हूं:
@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();
}
और इसने काम किया। लेकिन मैं सोच रहा था कि क्या कोई बेहतर विलेय है क्योंकि यह मेरे लिए एक हैक की तरह दिखता है।
मैं एक कस्टम डिसेरिज़ाइज़र भी लिख सकता हूं लेकिन मुझे कई अलग-अलग पीओजेओ मिले जो एनम का उपयोग करते हैं और इसे बनाए रखना मुश्किल होगा।
क्या कोई उचित नामकरण सम्मेलन के साथ शत्रुओं को अनुक्रमित और निर्जन करने का एक बेहतर तरीका सुझा सकता है?
मैं नहीं चाहता कि जावा में मेरी दुश्मनी कम हो!
यहाँ कुछ परीक्षण कोड का उपयोग किया गया है:
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));