如何为json响应添加和忽略字段

时间:2012-01-17 10:21:45

标签: java json hibernate jackson

我正在使用RestEasy和hibernate在Jackson中返回响应。 我有一个bean播放器,其中包含字段:name,id,age,position。

现在,我正在实现两个GET休息方法来恢复json。

  1. getPlayer(),返回玩家:姓名,身份证,年龄,职位。

  2. getPlayers(),它返回一个玩家列表,但是有了这个玩家列表,我不想返回位置。

  3. 我的意思是,如何为一个响应添加一个字段而忽略它以进行另一个响应。

    请建议。

    由于

3 个答案:

答案 0 :(得分:18)

您应该在POJO getter上使用@JsonIgnore注释。

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

<强>更新

您需要使用@JsonIgnoreProperties的界面并在请求映射上将其设置为@JSONFilter

您可以在此处详细了解: http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring

答案 1 :(得分:0)

我正在使用tomee,忽略json响应transient中的字段对我有用,但我不知道它是否是正确的方法(我的应用程序没有杰克逊可见,我只是包括jee-web api):

的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");
    }
}

对象

public class MyObject {

    public MyObject() {
    }

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

    public String name;

    public transient String color;
}

响应

{"name":"myname"}

答案 2 :(得分:-8)

你不能简单地将位置字段归零吗?

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

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

    return players;
}