2012-11-15 43 views
9

Tôi hiện đang sử dụng Jersey để trả về JSON. Làm cách nào để tôi trả lại JSONP? Ví dụ: phương pháp RESTful hiện tại của tôi là:Trả lại JSONP từ Jersey

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

Tôi muốn triển khai trên Tomcat (không muốn yêu cầu sử dụng GlassFish). Phụ thuộc duy nhất của tôi trên Jersey là:

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

Phụ thuộc bổ sung nào là cần thiết? Mã sẽ thay đổi như thế nào?

Cảm ơn.
Naresh

Trả lời

9

Hãy nhìn vào các JSONP dụ (đặc biệt là tài nguyên ChangeList) tại Jersey (bạn có thể tải về toàn bộ dự án here).

gì về cơ bản bạn cần làm là một cái gì đó như thế này:

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

Điều đó làm việc như một sự quyến rũ! Cảm ơn bạn! – Naresh

+4

Cần tạo "ứng dụng/javascript" và có khả năng thêm tham số gọi lại theo ví dụ. –

6

Điều quan trọng là bạn phải thay đổi câu trả lời đúng, như @s_t_e_v_e nói. Nó phải là một cái gì đó như thế này:

@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); 
    } 
Các vấn đề liên quan