Java 如何为json响应添加和忽略字段
我正在使用RestEasy和hibernate返回Jackson中的响应。 我有一个bean播放器,它有字段:name、id、age、position 现在,我正在实现两个用于返回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注释
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)。这种方法在使用持久性时可能会带来问题,我不会这样做。另一方面,如果您仅将此对象用于数据传输,则应该可以。