gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:04 26 4
gpt4 key购买 nike

我正在使用 Spring 和 Java 并实现基于 REST 的服务。我有一组开发人员,他们也为移动设备、iPad 和 Web 开发。假设我有一个 bean

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 之间的内容。

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

这样的 GET 请求
GET>http://somedomain.com/users?filter=name,id,photoUrl

这会返回一个类似于 JSON 的结构

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

同样,如果有人要求更多字段,则可以对其进行过滤。请告诉我如何做到这一点,以便我的 API 保持通用并可供所有人使用。

最佳答案

您可以实现您想要的,但需要一些额外的工作。我可以为您提供两种解决方案。

1。返回一个 Map

只需将请求的每个属性放入 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 方法以满足您的需要。这样做的一大优势是您无需更换 Controller 。

关于java - 限制 REST API 的 JSON 响应中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802032/

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