gpt4 book ai didi

java - 如何使用 Java 返回部分 JSON 响应?

转载 作者:IT老高 更新时间:2023-10-28 12:46:51 28 4
gpt4 key购买 nike

我正在构建一个 RESTful API,并希望为开发人员提供选择在 JSON 响应中返回哪些字段的选项。 This blog post显示了几个 API(Google、Facebook、LinkedIn)如何允许开发人员自定义响应的示例。这称为部分响应。

一个示例可能如下所示:

/users/123?fields=userId,fullname,title

在上面的示例中,API 应返回用户“123”的 userId、fullName 和 title 字段。

我正在寻找如何在我的 RESTful Web 服务中实现这一点的想法。我目前正在使用 CXF(编辑:和 Jackson),但愿意尝试另一个 JAX-RS 实现。

这是我目前拥有的。它返回一个完整的用户对象。如何根据“字段”参数仅返回 API 调用者在运行时需要的字段?我不想让其他字段为空。我只是不想返回。

@GET
@Path("/{userId}")
@Produces("application/json")
public User getUser(@PathParam("userId") Long userId,
@DefaultValue("userId,fullname,title") @QueryParam("fields") String fields) {

User user = userService.findOne(userId);

StringTokenizer st = new StringTokenizer(fields, ",");
while (st.hasMoreTokens()) {

// here's where i would like to select only the fields i want to return

}
return user;
}

更新:

我关注了 unludo 的链接,然后链接到此:http://wiki.fasterxml.com/JacksonFeatureJsonFilter

使用该信息,我将 @JsonFilter("myFilter") 添加到我的域类中。然后我修改了我的 RESTful 服务方法以返回 String 而不是 User,如下所示:

@GET
@Path("/{userId}")
@Produces("application/json")
public String getUser(@PathParam("userId") Long userId,
@DefaultValue("userId,fullname,title") @QueryParam("fields") String fields) {

User user = userService.findOne(userId);

StringTokenizer st = new StringTokenizer(fields, ",");
Set<String> filterProperties = new HashSet<String>();
while (st.hasMoreTokens()) {
filterProperties.add(st.nextToken());
}

ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter",
SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));

try {
String json = mapper.filteredWriter(filters).writeValueAsString(user);
return json;
} catch (IOException e) {
e.printStackTrace();
return e.getMessage();
}
}

我需要做更多的测试,但到目前为止一切都很好。

最佳答案

如果你使用 Jackson(一个很棒的 JSON 库——我相信这是 Java 的标准),你可以使用 @View 注释来过滤你想要的结果对象。

我知道你想要一些动态的东西,所以它有点复杂。你会在这里找到你要找的东西:http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.html (看6。完全动态过滤:@JsonFilter)。

我会对您找到的解决方案感兴趣。

关于java - 如何使用 Java 返回部分 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314735/

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