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

Java 如何为json响应添加和忽略字段,java,json,hibernate,jackson,Java,Json,Hibernate,Jackson,我正在使用RestEasy和hibernate返回Jackson中的响应。 我有一个bean播放器,它有字段:name、id、age、position 现在,我正在实现两个用于返回json的GETrest方法 getPlayer(),返回一个播放器:姓名、id、年龄、职位 getPlayers(),它正在返回一个玩家列表,但是有了这个玩家列表,我不想返回位置 我的意思是,我如何为一个响应添加一个字段,而为另一个响应忽略它 请建议 谢谢您应该在POJO getter上使用@JsonIgnore注释

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

现在,我正在实现两个用于返回json的
GET
rest方法

  • getPlayer()
    ,返回一个播放器:姓名、id、年龄、职位

  • getPlayers()
    ,它正在返回一个玩家列表,但是有了这个玩家列表,我不想返回位置

  • 我的意思是,我如何为一个响应添加一个字段,而为另一个响应忽略它

    请建议


    谢谢

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

    更新:

    您需要使用带有
    @JsonIgnoreProperties
    的接口,并在请求映射中将其设置为
    @JSONFilter

    您可以在此处阅读更多信息:

    您不能简单地将位置字段清空吗

    @GET
    @Path("/players")
    public List<Player> getPlayers(){
        List<Player> players = getPlayersFromHibernate();
    
        for(Player player : players)
            player.setPosition(null);
    
        return players;
    }
    
    @GET
    @路径(“/players”)
    公共列表getPlayers(){
    List players=getPlayersFromHibernate();
    用于(玩家:玩家)
    player.setPosition(空);
    返回球员;
    }
    
    我正在使用tomee忽略json响应中的一个字段
    transient
    对我有效,但我不知道这是否正确(我的应用程序看不到jackson,我只是包括了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"}
    

    我知道,但我希望同一个字段忽略一个响应,同一个字段添加另一个,如链接中所示。。。我需要创建一个接口AppDetailFilter(),并在请求中使用@JsonFilter。但我没有得到接口中应该包含的内容,以及如何使用它来忽略不同请求的不同字段。这只是一种没有方法的标记接口。您可以配置几个接口。然后将每个请求映射到这个接口。如果忘记编写代码以清空字段,这将导致引入错误。使用
    @JsonIgnore
    这样就不必了。这将如何解决OP的要求“如何为一个响应添加一个字段,而为另一个响应忽略它”?此外,在编写代码时“忘记”做任何事情都会导致bug;)在我看来,这是一个最简单的解决方案,同时将@JsonIgnore添加到必须始终忽略的属性中。艾登,你还有别的办法吗?我不喜欢使用JsonView和JsonFilter获得相同结果的方式。这样行吗?因为我也是这样想的,在我将不必要的记录发送到
    ObjectMapper
    以将其转换为JSON之前,我将其设置为null。映射程序提供空指针错误。我认为是关于“product”的子字段,我设置了null。有解决方案吗?当然,这与其说是一个答案,不如说是一个解决办法,但作为一个快速而肮脏的解决方案,它可以在JsonIgnore注释因其他原因不可用的情况下工作(例如,如果您编译了pojo)。这种方法在使用持久性时可能会带来问题,我不会这样做。另一方面,如果您仅将此对象用于数据传输,则应该可以。