ऐसा लगता है कि आपको यहां MessageBodyReader
का उपयोग करना होगा। यहाँ एक उदाहरण है, jdom का उपयोग कर:
import org.jdom.Document;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.MediaType;
import javax.ws.rs.ext.MultivaluedMap;
import java.lang.reflect.Type;
import java.lang.annotation.Annotation;
import java.io.InputStream;
@Provider // this annotation is necessary!
@ConsumeMime("application/xml") // this is a hint to the system to only consume xml mime types
public class XMLMessageBodyReader implements MessageBodyReader<Document> {
private SAXBuilder builder = new SAXBuilder();
public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
// check if we're requesting a jdom Document
return Document.class.isAssignableFrom(type);
}
public Document readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) {
try {
return builder.build(entityStream);
}
catch (Exception e) {
// handle error somehow
}
}
}
संसाधनों अपने जर्सी तैनाती पर कार्रवाई करेंगे की सूची में इस वर्ग के जोड़े (आमतौर पर web.xml द्वारा विन्यस्त, मुझे लगता है)। फिर आप इस तरह अपने नियमित रूप से संसाधन वर्गों में से एक में इस रीडर का उपयोग कर सकते हैं:
@Path("/somepath") @POST
public void handleXMLData(Document doc) {
// do something with the document
}
मैं सत्यापित नहीं किया है इस काम करता है कि बिल्कुल के रूप में आपके द्वारा लिखा गया है, लेकिन है कि यह का सार है। यहाँ अधिक पढ़ने:
एक @Consumes (MediaType.TEXT_PLAIN) जोड़ना था मेरे लिए भी जरूरी है। –
या मुझे लगता है कि सामान्य रूप से @ कंस्यूम्स कुछ भी होगा? –
यह जर्सी में संदेशों को डीबग करने के लिए बेहद सहायक है, जहां भी किसी भी कारण से, नेटवर्क निरीक्षण एक विकल्प नहीं है, लेकिन कोड परिवर्तन (मेरे मामले में स्थानीय एकीकरण परीक्षण) हैं। – Patrick