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

2023-12-06

我正在使用 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(使用前将#替换为@)

限制 REST API 的 JSON 响应中的字段? 的相关文章

随机推荐

  • PHP 为什么 unset 不释放内存?

    我有 php 应用程序 它应该管理 导出 大量数据 并且必须在生产中完成 所以我需要尽可能低的内存使用量 主要标准 简而言之 App循环导出数据 比如 for fileCounter 0 fileCounter lt 70 fileCoun
  • 在哪里可以找到 Firebase 云消息传递的 API 密钥?

    我正在尝试弄清楚新版本的 GCM 或 Firebase Cloud Messaging 是如何工作的 因此我将我的项目之一移至新的 Firebase 控制台 如果我没有 API KEY 或者我想创建一个新的 其中我可以做吗 It s in
  • PHP搜索引擎注意:未定义索引:类别[重复]

    这个问题在这里已经有答案了 大家好 我在一些浏览类别的帮助下制作了一个脚本 示例 我们有下一个类别 PCgames All 和 Documents X 用户正在 PCgames 中搜索 Y 游戏 该脚本在 PCgames 类别中搜索 Y 游
  • iPhone 在输入字段中触发键盘(HTML / Javascript)

    我正在尝试设置几个相互连接的输入字段 在第一个字段中您可以输入 3 位数字 在第二个字段中您可以输入 3 位数字 在第三个字段中 您可以输入 4 位数字 当我的第一个字段为 3 位数字时 我希望焦点移动到第二个字段 移动到第三个字段也是如此
  • Laravel 5.2 中的自加入

    我有以下票务表 if Schema hasTable tblticket Schema create tblticket function Blueprint table table gt increments TicketID table
  • 反序列化具有混合值 System.Text.JSON 的 JSON 数组

    我正在尝试创建一个在 net core 3 1 中呈现的页面 该页面基于 JSON 呈现页面 如何反序列化本文末尾的 JSON 我尝试反序列化它 但它不起作用 因为我丢失了每个组件的数据 因为 Page 类有一个List
  • 如何在 Azure 中执行区分大小写的 LINQ 查询?

    我正在使用 Windows Azure 存储表 并且想要查询一个对象 用户输入一个字符串 我在数据库中查找该字符串 如下所示 var myKey SomeCaseSensitiveKeyInputByTheUser var someObje
  • Spring ActiveDirectoryLdapAuthenticationProvider handleBindException - 提供的密码无效错误

    我们正在尝试使用 Spring security 对我们的企业 LDAP 进行身份验证 我在用着ActiveDirectoryLdapAuthenticationProvider 下面是 Spring 配置文件的片段
  • 图像裁剪的 OpenCV 相机校准(ROI 子矩阵)

    我在使用 OpenCV 的不失真函数时遇到一些问题 我正在使用使用广角镜头的相机 假设我对它的访问有问题 因为它已经安装了 问题基本上可以归结为 我已经成功测量了所有镜头参数 并且可以毫无问题地使全帧图像不失真 问题是我实际上是在某种线扫描
  • 这是 QML 中的最小可行 TreeView 模型吗?

    我正在制作一个包含三个项目的折叠列表 嘿 什么 和 起来 我想把它放到树视图中 我知道这个清单会只包含这三项 因此 我想知道如何将这些项目 嵌套 在一起 我知道敏捷系统有一些实现 支持添加和删除父 子对象 查找索引 强大的模型 但是 我实际
  • C# 设计模式建议

    我有一个对象的集合 在这个集合中 我需要使用多个条件搜索对象的出现 IE 使用条件 1 进行搜索 如果条件 1 失败 则使用条件 2 如果条件 2 失败 则使用条件 3 如果条件 3 失败 则使用条件 4 这些条件中的每一个都由许多过滤器组
  • NodeJS 和 Socket.io:Chrome 未加载 WebSockets

    Chrome 正在以长轮询方式加载 并且加载指示器不会停止 为什么 Chrome 不使用 WebSockets 以及如何防止加载指示器在使用长轮询时旋转 我正在使用最新的socket io和nodejs v2 5 我第一次连接时 它使用 W
  • 在 Jenkins(MacOSX 服务器)上构建 iOS 应用程序时出错

    我的 Jenkins 构建工作失败并显示以下消息 BUILD NATIVE TARGET MyTarget OF PROJECT MyProject WITH CONFIGURATION Debug Check dependencies C
  • 由于 DPI 意识,Microsoft Store 认证失败

    我曾想将我的应用程序的新版本 WPF 通过 Desktop Bridge 转换为 UWP 发布到 Microsoft Store 但它未能通过认证并出现以下警告 文件 exe 既没有在清单中显示 PerMonitorV2 也没有调用 DPI
  • 将多个字符列转换为 R 中的 as.Date 和 time

    我们有一个任意数据集 称为 df enter lt c 2017 01 01 2018 02 02 2018 03 03 guest lt c Foxtrot Uniform Charlie Kilo disposal lt c 2017
  • 使用 GraphicsLayer 时弹出窗口无法正确隐藏字段 - ArcGIS Javascript API 4.x

    使用 ArcGIS API Javascript 4 x 和 GraphicsLayer 弹出窗口无法正确隐藏字段 它与 FeatureLayer 一起工作正常 但我需要使用 GraphicsLayer 来满足此请求 下面附上一个重现该错误
  • Android:CollapsingToolbarLayout 和 SwipeRefreshLayout 卡住

    我将 CollapsingToolbarLayout RecyclerView 和 SwipeRefreshLayout 一起使用 Xml
  • Excel 精确单词匹配

    假设我在单元格 A1 中有 Vegas is Great 我想编写一个公式来查找单元格中的确切单词 gas 维加斯 天然气 但我找到的唯一搜索公式 ISNUMBER SEARCH gas lower A1 返回真 有没有办法做精确匹配 我理
  • 如何与Chrome App中的WebView通信?

    我开发了一个网站 打算在 Chrome 应用程序的网络视图中显示 这很好用 现在 我想使用网站上的 postMessage 将消息从 web 视图发送到包含的 Chrome 应用程序中 这是通过以下方式完成的top postMessage在
  • 限制 REST API 的 JSON 响应中的字段?

    我正在使用 Spring 和 Java 并实现基于 REST 的服务 我有一群开发人员 他们也为移动设备 iPad 和 Web 进行开发 假设我有一颗豆子 Class User private String Name private Int