2012-11-15 16 views
9

Obecnie korzystam z usługi Jersey, aby zwrócić JSON. Jak zamiast tego zwrócić JSONP? Na przykład, moja obecna metoda relaksującego jest:Powracający JSONP z Jersey

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

chciałbym wdrożyć na Tomcat (nie chce się z koniecznością wykorzystania GlassFish). Moje jedyne zależności na Jersey to:

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

Jakie dodatkowe zależności są potrzebne? Jak zmieni się kod?

Dzięki.
Naresh

Odpowiedz

9

Spójrz na przykład JSONP (zwłaszcza zasobami ChangeList) w Jersey (można pobrać cały projekt here).

Co to w zasadzie trzeba zrobić, to coś takiego:

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

To zadziałało jak czar! Dziękuję Ci! – Naresh

+4

Należy utworzyć "application/javascript" i potencjalnie dodać parametr callback zgodnie z przykładem. –

6

Ważne jest, aby zmodyfikować poprawną odpowiedź, jak @s_t_e_v_e mówi. Powinno być coś takiego:

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