java-Spring Data Rest:如何通过另一个对象的键进行搜索?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Spring Data Rest:如何通过另一个对象的键进行搜索?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1953字,纯文字阅读大概需要3分钟。
内容图文
![java-Spring Data Rest:如何通过另一个对象的键进行搜索?](/upload/InfoBanner/zyjiaocheng/661/96ed8ad42e674fcf84df1a61f7355154.jpg)
在Spring-Data-Rest中,对象的ID是随对象返回的URI.例如,如果我有一个用户,则它可能具有类似以下内容的URI:
http://example.com/users/1
在真实的REST api中,此URI是对象的ID,您不应仅使用“ 1”作为ID.
给出该答案,我该如何搜索属于该用户的所有订单?
http://example.com/orders/search/findByUser?user={{XXX}}
具体来说,{{XXX}}我该怎么用?
我知道我可以做相反的搜索:
http://example.com/users/1/orders
但就我而言,我需要搜索匹配的作业,以便可以添加也是键的其他参数.
我可以通过在OrderRepository上创建以下函数定义来导出/ orders / search / findByUser:
列出findByUser(用户);
并且findByUser将由Spring-Data-REST导出,但是如何将User指定为GET参数?
再次,我特别在寻找纯REST解决方案,因为Spring Data Rest项目试图鼓励纯净.
解决方法:
您可以看一下Spring Data的Query注释.它使您无需自定义控制器即可执行自定义查询.
编辑:
查询参数是通过简单属性过滤资源的好方法.由于SDR将所有复杂类型序列化为关系,因此更加清楚的是,筛选仅适用于其余(简单)属性.
如果只有一种关系,则可以正确地提到使用/ users / 1 / orders进行“反向”搜索的方式.
如果要按多种关系进行搜索,建议您定义一个单独的搜索(子)资源,并通过对该资源发出POST请求来执行搜索.
例如:
POST /orders/search
{
"user": "http://example.org/users/1",
...
}
这样,SDR将正确地将URI转换为实体.但是,我认为您将需要在此处使用自定义控制器,但是应该仍然可以使用Spring Data存储库并提供用户和其他实体作为参数.
有关更多信息,请参见以下SO问题:
How to design RESTful search/filtering?
RESTful URL design for search
编辑2:
解决使用POST进行搜索违反REST规范的问题:
REST设计得很简单. REST的主要优势之一是您不必做任何事情.您可以根据自己的需要调整规格.当然,这可能意味着您的API的RESTful程度较低,但是如果它给API的使用者带来不必要的开销,则应严格遵守规范,这是否值得这样做?
当然,您可以设计上述想法以完全满足REST规范.这将涉及创建单独的搜索实体,将其持久化到数据库中,然后通过调用诸如/ result之类的子资源或诸如此类的子资源来检索搜索结果.但是,问题是,是否值得.
在您的具体示例中,我只要求客户端从链接中解析ID并将其作为查询参数提供.如果以后要扩展应用程序,则可以引入诸如命名搜索之类的功能,并应用上述解决方案.
内容总结
以上是互联网集市为您收集整理的java-Spring Data Rest:如何通过另一个对象的键进行搜索?全部内容,希望文章能够帮你解决java-Spring Data Rest:如何通过另一个对象的键进行搜索?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。