2012-11-15 23 views
9

मैं वर्तमान में जेएसओएन वापस करने के लिए जर्सी का उपयोग कर रहा हूं। मैं इसके बजाय JSONP कैसे वापस करूँ? उदाहरण के लिए, मेरे वर्तमान RESTful विधि है:जर्सी से JSONP लौटने

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public List<Order> getOrders() { 
    return OrderRepository.getOrders(); 
} 

मैं बिलाव पर तैनात करने के लिए चाहते हैं (ग्लासफिश के उपयोग की आवश्यकता नहीं करना चाहती)। जर्सी पर मेरी एकमात्र निर्भरताएं हैं:

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-json</artifactId> 
     <version>1.9.1</version> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.9.1</version> 
    </dependency> 

अतिरिक्त निर्भरताओं की क्या आवश्यकता है? कोड कैसे बदल जाएगा?

धन्यवाद।
नरेश

उत्तर

9

जर्सी में JSONP उदाहरण (विशेष रूप से ChangeList संसाधन) (आप पूरी परियोजना here डाउनलोड कर सकते हैं) पर एक नजर डालें।

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public JSONWithPadding getOrders() { 
    return new JSONWithPadding(new GenericEntity<List<Order>>(OrderRepository.getOrders()){}); 
} 
+0

यह एक आकर्षण की तरह काम करता था! धन्यवाद! – Naresh

+4

"एप्लिकेशन/जावास्क्रिप्ट" उत्पन्न करने की आवश्यकता है और उदाहरण के अनुसार संभावित रूप से कॉलबैक पैराम जोड़ें। –

6

यह सही जवाब को संशोधित करने के रूप में @s_t_e_v_e कहते हैं महत्वपूर्ण है:

आप मूल रूप से क्या करने की जरूरत कुछ इस तरह है। यह कुछ ऐसा होना चाहिए:

@GET 
@Produces({"application/javascript"}) 
public JSONWithPadding getOrdersJSonP(@QueryParam("callback") String callback) { 
    List<Order> orderList = OrderRepository.getOrders(); 
    return new JSONWithPadding(new GenericEntity<List<Order>>(orderList){}, 
       callback); 
    }