सबसे पहले, मेरे प्रश्न को बंद करने का निर्णय लेने से पहले, मैंने this समाधान का प्रयास किया है, लेकिन यह मेरे लिए काम नहीं कर रहा है।एक ही समय में ठीक से स्वरूपित एक्सएमएल और जेएसओएन उत्पन्न नहीं कर सकता
मेरे पास एक REST सेवा है जो Accept
शीर्षलेख के आधार पर JSON
या XML
वापस करने वाली है। मैं इसे उचित JSON उत्पन्न कर सकता हूं, लेकिन एक्सएमएल नहीं। जब मैं एक्सएमएल को ठीक करता हूं तो जेएसओएन खराब हो जाता है। नीचे मैं अपना कोड पेश कर रहा हूं।
एक्सएमएल अच्छा लगता है, लेकिन JSON नहीं
Message.java
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
int id;
String text;
@XmlElementWrapper
@XmlElementRef
List<Comment> comments;
public Message() {
}
// getters and setters
}
Comment.java
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "comment")
public class Comment {
int id;
String text;
public Comment() {
}
//getters and setters
}
MessageResource.java
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("messages")
public class MessageResource {
DBUtils db = new DBUtils();
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getXML() {
List<Message> messages = db.getMessages();
return Response.ok(messages.toArray(new Message[messages.size()]), MediaType.APPLICATION_XML).build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getJSON() {
List<Message> messages = db.getMessages();
return Response.ok(messages.toArray(new Message[messages.size()]), MediaType.APPLICATION_JSON).build();
}
}
यहाँ XML
परिणाम है, जो ठीक है:
<messages>
<message>
<id>1</id>
<text>Java is an OOP language.</text>
<comments>
<comment>
<id>20</id>
<text>That's correct.</text>
</comment>
<comment>
<id>30</id>
<text>test test</text>
</comment>
</comments>
</message>
<message>
<id>1</id>
<text>Java is an OOP language.</text>
<comments>
<comment>
<id>20</id>
<text>That's correct.</text>
</comment>
<comment>
<id>30</id>
<text>test test.</text>
</comment>
</comments>
</message>
</messages>
और यहाँ JSON
परिणाम है, comments
पर ध्यान देना। मुझे बस एक comments
सरणी चाहिए।
[
{
"id": 1,
"text": "Java is an OOP language.",
"comments": {
"comment": [
{
"id": 20,
"text": "That's correct."
},
{
"id": 30,
"text": "test test"
}
]
}
},
{
"id": 1,
"text": "Java is an OOP language.",
"comments": {
"comment": [
{
"id": 20,
"text": "That's correct."
},
{
"id": 30,
"text": "test test."
}
]
}
}
]
JSON फिक्सिंग
XML प्रतिक्रिया को खराब करता अगर मैं Message
वर्ग से @XmlElementWrapper
और @XmlElementRef
एनोटेशन बाहर निकालना है, तो यह JSON के लिए काम करता है, लेकिन नहीं एक्सएमएल।
Message.jave
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
int id;
String text;
List<Comment> comments;
public Message() {
}
//getters and setters
}
Comment
और MessageResource
कक्षाएं ही रहते हैं। - ठीक है
[
{
"id": 1,
"text": "Java is an OOP language.",
"comments": [
{
"id": 20,
"text": "That's correct."
},
{
"id": 30,
"text": "test test"
}
]
},
{
"id": 1,
"text": "Java is an OOP language.",
"comments": [
{
"id": 20,
"text": "That's correct."
},
{
"id": 30,
"text": "test test."
}
]
}
]
XML
-
JSON
गलत
<messages>
<message>
<id>1</id>
<text>Java is an OOP language.</text>
<comments>
<id>20</id>
<text>That's correct.</text>
</comments>
<comments>
<id>30</id>
<text>test test</text>
</comments>
</message>
<message>
<id>1</id>
<text>Java is an OOP language.</text>
<comments>
<id>20</id>
<text>That's correct.</text>
</comments>
<comments>
<id>30</id>
<text>test test.</text>
</comments>
</message>
</messages>
कैसे एक साथ इन दो काम करने के लिए किसी को भी पता है:
यहाँ परिणाम मैं मिलता है? जेएसओएन के लिए एक्सएमएल और जीएसओएन के लिए जेएक्सबी का उपयोग करने वाला एकमात्र समाधान है, लेकिन मुझे जीएसओएन का उपयोग करके जेएसओएन ऑब्जेक्ट्स मैन्युअल रूप से बनाना है।
धन्यवाद!
आप [JacksonJaxbJSON] करने के लिए देखा है (http://fasterxml.github.io/jackson-jaxrs-json-provider/javadoc/2.0.1/com/ fastxml/जैक्सन/जैक्सर्स/जेसन/जैक्सन जैक्सबीजेसनप्रोवाइडर.html) एनोटेशन? 'जेसन टाइप' की तरह .. – ulab
@ulab, क्या आप मुझे इसका उपयोग करने का एक उदाहरण दिखा सकते हैं? मैंने इसे पहले नहीं देखा है। –