2010-06-24 14 views
5

मैं एक आरईएसटी सेवा बनाना चाहता हूं जो या तो JSON या XML लौटा सकता है। एक निश्चित माइम प्रकार के अनुरोध के अनुरोध में मैं किस अनुरोध पैरामीटर को सेट करता हूं? मुझे पता है कि इसे प्रतिक्रिया में कैसे सेट किया जाए, लेकिन किसी निश्चित अनुरोध का अनुरोध करने का एक तरीका होना चाहिए। वर्तमान में मैं URL में यह करएक ही रिस्ट के साथ कई प्रतिक्रिया प्रकार प्राप्त करें?

restServlet/इंजन/2WS2345

jsonServlet/इंजन/2WS2345

यह मैं JSON या XML हो जाता है। लेकिन मैंने सोचा कि मैंने पढ़ा है कि अनुरोध में सेट करने के लिए एक पैरामीटर है। मैं जावा का उपयोग कर रहा हूँ ...

+0

जावा टैग जोड़ा जाना चाहिए। – h3xStream

उत्तर

4

यदि आप जर्सी का उपयोग कर रहे हैं तो आप आसानी से @Produces एनोटेशन के साथ विधि को कॉन्फ़िगर कर सकते हैं। @ उत्पाद ({"एप्लिकेशन/एक्सएमएल", "एप्लिकेशन/जेसन"})

अच्छी बात यह है कि आपके पास अभी भी एक JAXB ऑब्जेक्ट रिटर्न प्रकार के रूप में हो सकता है। यह स्वचालित रूप से आवश्यक प्रारूप में बदल दिया जाएगा। जब तक एमआईएमई प्रकार स्वीकार्य हैडर में निर्दिष्ट नहीं किया जाता है, यह हमेशा उपरोक्त मामले में एक्सएमएल भेज देगा।

रेफरी http://jersey.java.net/nonav/documentation/1.6/user-guide.html

5

अपने कोड के Restlet टिप्पणियों का उपयोग करने के साथ ऐसा कर सकते हैं और या तो सामग्री से बातचीत करते उपयोगकर्ता-एजेंट के Accept हैडर पर निर्भर करता है या Restlet के TunnelService का उपयोग कर यूआरआई (में विस्तार निर्दिष्ट काम करते हैं और MetadataService)। यहाँ एक उदाहरण (Restlet 2 के आधार पर) है:

public class TestApplication extends Application { 
    public static class TestResource extends ServerResource { 
     @Get("txt") 
     public Representation toText() { 
      return new StringRepresentation("Hello!", 
       MediaType.TEXT_PLAIN); 
     } 

     @Get("xml") 
     public Representation toXml() { 
      return new StringRepresentation("<test>Hello</test>", 
       MediaType.APPLICATION_XML); 
     } 
    } 

    @Override 
    public synchronized Restlet createInboundRoot() { 
     getTunnelService().setEnabled(true); 
     getTunnelService().setExtensionsTunnel(true); 
     Router router = new Router(); 
     router.attachDefault(TestResource.class); 
     return router; 
    } 

    public static void main(String[] args) throws Exception { 
     Component component = new Component(); 
     component.getServers().add(Protocol.HTTP, 8182); 
     component.getDefaultHost().attachDefault(new TestApplication()); 
     component.start(); 
    } 
} 

सामग्री बातचीत स्वीकार करें शीर्षक के माध्यम से काम करता है:

  • curl -H "Accept: text/plain" http://localhost:8182/test रिटर्न Hello!
  • curl -H "Accept: application/xml" http://localhost:8182/test रिटर्न <test>Hello</test>

यह भी एक्सटेंशन के माध्यम से काम करता है (getTunnelService().setExtensionsTunnel(true) के लिए धन्यवाद):

  • curl http://localhost:8182/test.txt रिटर्न Hello!
  • curl http://localhost:8182/test.xml रिटर्न <test>Hello</test>

वहाँ एक default list of extension to media-type mapping है, लेकिन इस MetadataService के माध्यम से विन्यस्त किया जा सकता।

+0

हां, और धन्यवाद। गुप्त सॉस है: req.getHeader ("स्वीकार करें")। यह एक स्ट्रिंग देता है जो कोई पार्स कर सकता है। यहां मैं यह प्राप्त करता हूं जब मैं इसे सेट नहीं करता हूं और ब्राउज़र का उपयोग करता हूं: छवि/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, एप्लिकेशन /vnd.ms-xpsdocument, एप्लिकेशन/xaml + xml, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */* धन्यवाद! – markthegrea

संबंधित मुद्दे