我正在使用 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 则需要介于移动和 Web 之间的内容。
由于我使用杰克逊作为解析器,有没有一种方法可以在向控制器请求时指定我需要的所有数据并避免其他数据。例如,考虑我执行一个 GET 请求,例如
GET>http://somedomain.com/users?filter=name,id,photoUrl
这会返回一个 JSON 结构,类似于
{
"name":"My Name",
"id":32434,
"photoUrl":"/sss/photo.jpg"
}
同样,如果有人要求更多字段,则可以过滤它们。请让我知道如何做到这一点,以便我的 API 保持通用且可供所有人使用。
您可以实现您想要的目标,但需要一些额外的工作。我可以为您提供两种解决方案。
1.返回一个Map
只需将请求的每个属性放入地图中即可。
2.直接使用Jackson Objectmapper
Jackson 允许您设置过滤器来指定序列化或忽略哪些属性。
FilterProvider filter = new SimpleFilterProvider().addFilter("myFilter",
SimpleBeanPropertyFilter.filterOutAllExcept(requestedProperties));
String json = objectMapper.writer(filter).writeValueAsString(value);
然后,您可以直接返回 JSON 字符串而不是对象。
对于这两种解决方案,您最好编写一个完成这项工作的类。但如果您这样做,您也可以编写自己的消息转换器。您可以延长MappingJackson2HttpMessageConverter
,例如,并覆盖writeInternal
方法来满足您的需求。这样做的一个很大的优点是您不需要更改控制器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)