निम्नलिखित जैक्सन/जावा कोड है कि JSON में वस्तुओं को धारावाहिक में क्रमानुसार करने जैक्सन ObjectMapper का उपयोग करना, मैं इस हो रही है:JSON, में उपवर्ग नाम नहीं सुपर क्लास
{"animal":{"x":"x"}}
हालांकि, क्या मैं वास्तव में प्राप्त करना चाहते हैं यह है:
{"dog":{"x":"x"}}
वहाँ कुछ मैं AnimalContainer लिए कर सकते हैं, ताकि मैं वस्तु के क्रम प्रकार ("कुत्ता", "बिल्ली") मिलता है, "जानवर") के बजाय है? (संपादित करें: मुझे पता है कि नक्शा का नाम गेटर- और सेटर-विधि नामों से आता है।) एकमात्र तरीका जिसे मैं ऐसा करने के बारे में सोच सकता हूं वह है AnimalContainer के भीतर प्रत्येक प्रकार के पशु की विशेषता है उन सभी के लिए सेटर्स और गेटर्स, और लागू करें कि एक समय में केवल एक ही मूल्यवान है। लेकिन यह पशु superclass होने के उद्देश्य को हरा देता है और बस गलत लगता है। और मेरे असली कोड में मेरे पास वास्तव में एक दर्जन उप-वर्ग हैं, न केवल "कुत्ते" और "बिल्ली"। क्या ऐसा करने का कोई बेहतर तरीका है (शायद किसी भी तरह एनोटेशन का उपयोग करना)? मुझे भी deserializing के लिए एक समाधान की जरूरत है।
public class Test
{
public static void main(String[] args) throws Exception
{
AnimalContainer animalContainer = new AnimalContainer();
animalContainer.setAnimal(new Dog());
StringWriter sw = new StringWriter(); // serialize
ObjectMapper mapper = new ObjectMapper();
MappingJsonFactory jsonFactory = new MappingJsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(sw);
mapper.writeValue(jsonGenerator, animalContainer);
sw.close();
System.out.println(sw.getBuffer().toString());
}
public static class AnimalContainer
{
private Animal animal;
public Animal getAnimal() {return animal;}
public void setAnimal(Animal animal) {this.animal = animal;}
}
public abstract static class Animal
{
String x = "x";
public String getX() {return x;}
}
public static class Dog extends Animal {}
public static class Cat extends Animal {}
}
पशु होने की आवश्यकता के बिना 'ObjectMapper.enableDefaultTyping()' के साथ हल करने का कोई तरीका है? मैं जैक्सन 1.9 का उपयोग कर रहा हूं और मैंने कोशिश की है लेकिन अभी भी काम नहीं कर रहा है ..... –
डिफ़ॉल्ट टाइपिंग विभिन्न प्रकार के मानदंडों का उपयोग कर सकती है, जवाडॉक्स देखें, जिसमें कस्टम परिभाषा शामिल है, इसे किस पर लागू करना चाहिए। – StaxMan