2012-01-17 22 views
5

Tôi đang sử dụng RestEasy và hibernate để trả lời phản hồi trong Jackson. Tôi có một cầu thủ đậu có các lĩnh vực: tên, id, tuổi tác, vị trí.Cách thêm và bỏ qua một trường cho phản hồi json

Bây giờ, tôi đang triển khai hai phương pháp còn lại GET để lưu lại json.

  1. getPlayer(), sẽ trả về trình phát: tên, id, tuổi, vị trí.

  2. getPlayers(), đang trả về danh sách người chơi nhưng với danh sách người chơi này, tôi không muốn trả lại vị trí.

Ý tôi là, làm cách nào để thêm trường cho một câu trả lời và bỏ qua trường này cho một phản hồi khác.

Vui lòng đề xuất.

Cảm ơn

Trả lời

-7

Có thể bạn không chỉ đơn giản là null ra lĩnh vực vị trí?

@GET 
@Path("/players") 
public List<Player> getPlayers(){ 
    List<Player> players = getPlayersFromHibernate(); 

    for(Player player : players) 
     player.setPosition(null); 

    return players; 
} 
+4

điều này sẽ mở ra cho bạn giới thiệu một lỗi nếu bạn quên viết mã để vô hiệu hóa trường. sử dụng '@ JsonIgnore' để bạn không phải làm vậy. –

+0

Làm thế nào để giải quyết yêu cầu của OP "Làm thế nào tôi có thể thêm một trường cho một phản hồi và bỏ qua nó cho một phản ứng khác." ?Bên cạnh đó, "quên" để làm công cụ khi bạn mã sẽ luôn luôn gây ra lỗi;) – eiden

+1

Đây sẽ là giải pháp đơn giản nhất đối với tôi, cùng với việc thêm @JsonIgnore vào các thuộc tính phải luôn bị bỏ qua. Eiden, bạn có tìm cách nào khác để làm điều đó không? Tôi không thích cách JsonView và JsonFilter có thể được sử dụng để có được kết quả tương tự. – Jayz

17

Bạn nên sử dụng @JsonIgnore chú thích trên getter POJO.

http://jackson.codehaus.org/1.0.1/javadoc/org/codehaus/jackson/annotate/JsonIgnore.html

Cập nhật:

Bạn cần phải sử dụng giao diện với @JsonIgnoreProperties và thiết lập nó như @JSONFilter trên bản đồ Yêu cầu của bạn.

Bạn có thể đọc thêm về nó ở đây: http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring

+0

mà tôi biết, nhưng tôi muốn cùng lĩnh vực để bỏ qua một phản ứng và cùng lĩnh vực để thêm cho – Romi

+0

khác Ok sau đó xem cập nhật của tôi –

+0

như được đưa ra trong liên kết ... tôi cần phải thực hiện một giao diện AppDetailFilter() và sử dụng @JsonFilter với yêu cầu. nhưng không nhận được những gì nên được trong giao diện, và làm thế nào để sử dụng nó để bỏ qua các lĩnh vực khác nhau cho các yêu cầu khác nhau. – Romi

0

Tôi đang sử dụng tomee, bỏ qua một lĩnh vực để đáp ứng json transient công trình đối với tôi, nhưng tôi không biết nếu nó là con đường đúng để đi (không có jackson có thể nhìn thấy ứng dụng của tôi, tôi chỉ api bao gồm jee-web):

Servlet

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/") 
@Produces({ MediaType.APPLICATION_JSON }) 
public class JsonApi { 

    @GET 
    @Path("testapi") 
    public MyObject testApi() { 
     return new MyObject("myname", "mycolor"); 
    } 
} 

Object

public class MyObject { 

    public MyObject() { 
    } 

    public MyObject(String name, String color) { 
     this.name = name; 
     this.color = color; 
    } 

    public String name; 

    public transient String color; 
} 

Respo NSE

{"name":"myname"} 
+0

Cách tiếp cận này có thể giới thiệu các vấn đề khi sử dụng kiên trì, tôi sẽ không đi theo cách đó. Mặt khác, nếu bạn sử dụng đối tượng này chỉ để truyền dữ liệu, nó sẽ ổn thôi. – holmicz

Các vấn đề liên quan