3

我正在使用 Spring Data JPA 和 Spring Data Rest 将我的 JPA 实体公开为 Web 服务。我的实体有数百个属性,并且 oneTo(very)Many 与其他具有数百个属性的实体的关系。

我希望用户能够传入一个查询参数,该参数允许他们只取回他们关注的 JSON 响应正文的字段。过去,我使用过 IBM 的 Rational Team Concert REST API,它们允许调用者传入 XPath 查询以选择他们想要返回的字段。他们的 XPath 集成还允许调用者在各个字段上应用过滤逻辑。例如,以下是该 API 的可能:

workitem/workItem[creator/name='Bob Sacremento' or owner/name='Bob Sacremento']/(id|summary)

^上述查询将返回其所有者或创建者的名称等于 Bob Sacremento 的所有 workItem 元素的 id 和摘要字段。

workitem/workItem/(id|summary|comments[creator/name='Bob Sacremento']/content)

^以上查询将返回所有workItem元素的id、summary和comment content字段。但它只会显示 Bob Sacremento 创建的评论。

我想用我的 API 做类似的事情。在我编写自己的控制器之前,我想我会问是否有一个框架可以开箱即用地提供此功能。似乎 Spring Data REST 没有。

4

2 回答 2

1

您可以使用 Spring Data REST 来定义已知的投影,这可用于创建在您的底层模型上公开特定投影的端点和/或允许调用者通过 URI 请求已知(预定义的)投影,例如foo/bar/bas?projection=summary.

Spring Data REST 文档中的更多详细信息。

但是,我不知道有一个库可以与 Spring Data REST、JPA 集成并允许调用者指定投影(例如以 SQL 式 SELECT 语句的形式),然后代表您动态应用这些投影.

我怀疑您需要select=a,b,c在控制器中定义一个查询参数,然后使用提供的值通过 Spring Data JPA 应用投影。

于 2017-08-22T09:03:10.543 回答
0

GraphQl 提供了这个功能。

于 2019-01-18T21:37:29.047 回答