का उपयोग कर addional रैपिंग जोड़ने के लिए मैं है निम्नलिखित वर्ग:फोर्स जैक्सन एनोटेशन
public class Message {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
जब JSON करने के लिए उदाहरण परिवर्तित डिफ़ॉल्ट रूप से जैक्सन का उपयोग कर रहा है:
{"text":"Text"}
मैं चाहते हैं पाने के लिए:
{"message":{"text":"Text"}}
कोई JAXB/जैक्सन एनोटेशन मैं अपने लक्ष्य को प्राप्त करने का उपयोग कर सकते है?
समाधान के लिए, मैं एक वर्ग के साथ मेरी कक्षा लपेट कर सकते हैं:
public class MessageWrapper {
private Message message;
public Message getMessage() {
return message;
}
public void setMessage(Message message) {
this.message = message;
}
}
या एक अधिक सामान्य समाधान:
public class JsonObjectWrapper<T> {
/**
* Using a real map to allow wrapping multiple objects
*/
private Map<String, T> wrappedObjects = new HashMap<String, T>();
public JsonObjectWrapper() {
}
public JsonObjectWrapper(String name, T wrappedObject) {
this.wrappedObjects.put(name, wrappedObject);
}
@JsonAnyGetter
public Map<String, T> any() {
return wrappedObjects;
}
@JsonAnySetter
public void set(String name, T value) {
wrappedObjects.put(name, value);
}
}
इसलिए की तरह इस्तेमाल किया जा सकता कौन सा:
Message message = new Message();
message.setText("Text");
JsonObjectWrapper<Message> wrapper = new JsonObjectWrapper<Message>("message", message);
कोई JAXB/जैक्सन एनोटेशन मैं प्राप्त करने के लिए उपयोग कर सकते हैं है मेरा लक्ष्य?
धन्यवाद।
StaxMan, अगर JSON स्ट्रिंग के मूल तत्व नाम क्रमबद्धता के दौरान उपेक्षा किया जाना है, जैक्सन करता है 1.9 हमें 'DeserializationConfig.Feature.UNWRAP_ROOT_ELEMENT' अकेले सुविधा या एनोटेशन' के अलावा स्थापित करने के लिए आवश्यकता होती है @JsonRootName 'भी आवश्यक है? – asgs
मुझे सत्यापित करना होगा - UNWRAP पर्याप्त हो सकता है; सवाल यह है कि क्या नाम को मानचित्र बनाना है या नहीं। लेकिन '@ जेसन रूट नाम' के बिना भी, डिफ़ॉल्ट नाम मौजूद है (सरल वर्ग का नाम), जो अच्छी तरह से काम कर सकता है। – StaxMan
यह काम किया! बहुत बहुत धन्यवाद। – asgs