के साथ जेएसओएन क्रमबद्धता मैं जैक्सन 2.1.4 का उपयोग करके जेएसओएन से एक अपरिवर्तनीय पीओजेओ को क्रमबद्ध करने की कोशिश कर रहा हूं, कस्टम सीरिएलाइज़र लिखने के बिना और जितना संभव हो उतना एनोटेशन के साथ। मैं जैक्सन लाइब्रेरी को संतुष्ट करने के लिए अनावश्यक गेटर्स या डिफॉल्ट कन्स्ट्रक्टर को जोड़ने से बचना भी पसंद करता हूं।इन्सटेबल/पॉलिमॉर्फिक POJO <-> जैक्सन
मैं अब अपवाद पर अटक कर रहा हूँ:
JsonMappingException: नहीं उपयुक्त निर्माता प्रकार के लिए मिला [सरल प्रकार, वर्ग सर्किल]: JSON ऑब्जेक्ट से दृष्टांत नहीं कर सकते हैं (जोड़ें/प्रकार की जानकारी सक्षम करने की आवश्यकता?)
कोड:
public abstract class Shape {}
public class Circle extends Shape {
public final int radius; // Immutable - no getter needed
public Circle(int radius) {
this.radius = radius;
}
}
public class Rectangle extends Shape {
public final int w; // Immutable - no getter needed
public final int h; // Immutable - no getter needed
public Rectangle(int w, int h) {
this.w = w;
this.h = h;
}
}
परीक्षण कोड:
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); // Adds type info
Shape circle = new Circle(10);
Shape rectangle = new Rectangle(20, 30);
String jsonCircle = mapper.writeValueAsString(circle);
String jsonRectangle = mapper.writeValueAsString(rectangle);
System.out.println(jsonCircle); // {"@class":"Circle","radius":123}
System.out.println(jsonRectangle); // {"@class":"Rectangle","w":20,"h":30}
// Throws:
// JsonMappingException: No suitable constructor found.
// Can not instantiate from JSON object (need to add/enable type information?)
Shape newCircle = mapper.readValue(jsonCircle, Shape.class);
Shape newRectangle = mapper.readValue(jsonRectangle, Shape.class);
System.out.println("newCircle = " + newCircle);
System.out.println("newRectangle = " + newRectangle);
किसी भी मदद की बहुत सराहना की है, धन्यवाद!
होनहार देखा, लेकिन अब मैं निम्नलिखित अपवाद के बजाय मिल: {इंटरफ़ेस [email protected]son: JsonMappingException: निर्माता [सर्किल के लिए निर्माता, एनोटेशन का तर्क # 0 .annotation.JsonCreator()}] कोई संपत्ति नाम एनोटेशन नहीं है; उस नाम का होना चाहिए जब एकाधिक-पैरामीटर कन्स्ट्रक्टर निर्माता – hammarback
के रूप में एनोटेट किया गया हो हालांकि @JsonProperty एनोटेशन मौजूद है? – nutlike
हां, आपके उदाहरण में। सभी कन्स्ट्रक्टर तर्कों पर। – hammarback