2012-11-15 3 views
9

Ich verwende derzeit Jersey, um JSON zurückzugeben. Wie kann ich JSONP stattdessen zurückgeben? Zum Beispiel meine aktuellen RESTful Methode ist:Rückgabe von JSONP aus Jersey

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

Ich mag würde auf Tomcat einsetzen (wollen nicht auf die Verwendung von Glassfish verlangen). Meine einzigen Abhängigkeiten auf Jersey sind:

<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> 

Welche zusätzlichen Abhängigkeiten sind erforderlich? Wie wird sich der Code ändern?

Danke.
Naresh

Antwort

9

Werfen Sie einen Blick auf die JSONP Beispiel (vor allem die ChangeList Ressource) in Jersey (Sie das gesamte Projekt here herunterladen können).

Was Sie im Grunde tun müssen, ist so etwas wie dieses:

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

Das hat wie ein Charme funktioniert! Vielen Dank! – Naresh

+4

Sie müssen "application/javascript" erstellen und möglicherweise den Callback-Parameter wie im Beispiel hinzufügen. –

6

Es ist wichtig, die richtige Antwort zu modifizieren, wie @s_t_e_v_e sagt. Es sollte so etwas sein:

@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); 
    }