繁体   English   中英

限制REST API的JSON响应中的字段?

[英]Limiting Fields in JSON Response for REST API?

我正在使用Spring和Java并实现基于REST的服务。 我有一组为移动,iPad和Web开发的开发人员。 考虑一下我有一个豆子

Class User{
private String Name;
private Integer id;
private String photoURL;
private ArrayList<String> ProjectName;
private ArrayList<String> TechnologyList;
private ArrayList<String> InterestList;

//Getters and setters

}

虽然Web开发人员需要整个领域,而移动开发人员只需要两个字段,而iPad需要移动和网络之间的东西。

由于我使用jackson作为解析器,有没有办法在请求控制器时我可以指定我需要的所有数据并避免其他数据。 例如,考虑我做一个GET请求

GET>http://somedomain.com/users?filter=name,id,photoUrl

这给我带来了类似的JSON结构

{
"name":"My Name",
"id":32434,
"photoUrl":"/sss/photo.jpg"
}

Sameway如果有人要求更多字段,可以过滤它们。 请让我知道如何做到这一点,以便我的API保持通用和可用于所有人。

你可以达到你想要的效果,但还需要一些额外的工作。 我可以为您提供两种解决方案。

1.返回Map

只需将要求的每个房产都放入地图中即可。

2.直接使用Jacksons Object Mapper

Jackson允许您设置过滤器,指定序列化或忽略哪些属性。

FilterProvider filter = new SimpleFilterProvider().addFilter("myFilter",
   SimpleBeanPropertyFilter.filterOutAllExcept(requestedProperties));

String json = objectMapper.writer(filter).writeValueAsString(value);

然后,您可以直接返回JSON字符串而不是对象。

对于这两种解决方案,您最好写一个完成工作的类。 但如果你这样做,你也可以编写自己的消息转换器。 例如,您可以扩展MappingJackson2HttpMessageConverter ,并覆盖writeInternal方法以满足您的需要。 这具有很大的优势,您无需更改控制器。

直接的解决方案是实现自定义Jackson JSON序列化程序 ,该序列化程序将获取应从线程本地存储序列化的字段名称,然后仅序列化在该上下文中显示名称的字段。 另一方面,在控制器中,您可以从URL获取所有允许的字段名称,并将它们存储到线程本地上下文中。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM