gpt4 book ai didi

Java JSON RESTful Web 服务 - 过滤字段

转载 作者:行者123 更新时间:2023-11-30 09:17:33 25 4
gpt4 key购买 nike

场景

  • 用于我的 RESTful Web 服务请求的 Jersey/JacksonJson。
  • 具有属性 X、Y、Z 的实体 A。
  • 2 个 RESTful 请求。
  • 请求 1 应在 JSON 响应中返回具有属性 X、Y 的实体 A
  • 请求 2 应在 JSON 响应中返回具有属性 X、Y、Z 的实体 A
  • 实体 A 配置为属性 Z 使用 @JsonIgnore,因此它不会在 JSON 响应中返回

问题

如果在实体中设置为@JsonIgnore,我如何在请求 2 中返回属性 Z?除了使用@JsonIgnore 之外,还有更好的方法动态地执行此操作吗?下面是一些“演示”代码,以帮助澄清我的问题。

@Entity
Class A implements Serializable {
String X;
String Y;
String Z;

@JsonIgnore
public String getZ() {
return Z;
}
}

@Path("form")
Class Request {
@GET
@Path("request1")
@Produces({"application/json"})
public A request1() {
return A;
}

@GET
@Path("request2")
@Produces({"application/json"})
public A request2() {
return A;
}
}

最佳答案

您可以使用 @JsonView注释。

类似于:

public class Views {
public static class BasicView {
}

public static class FullView extends BasicView {
}
}

然后在 A 类中,

  @JsonView(Views.BasicView.class)
public String getX() {
return X;
}


@JsonView(Views.BasicView.class)
public String getY() {
return Y;
}


@JsonView(Views.FullView.class)
public String getZ() {
return Z;
}

当您必须返回 JSON 时,您将不得不使用基于自定义 View 的 ObjectWriter 序列化它们:

public static final ObjectWriter basicObjectWriter = objectMapper
.writerWithView(Views.BasicView.class);
public static final ObjectWriter fullObjectWriter = objectMapper
.writerWithView(Views.FullView.class);

然后,如果您执行 basicObjectWriter.writeValueAsString(responseObject),它将只写入 XYfullObjectWriter.writeValueAsString(responseObject) 将写入 XYZ

关于Java JSON RESTful Web 服务 - 过滤字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com