我使用Spring Data JPA和Spring Data Rest将我的JPA实体公开为web服务。我的实体有几百个属性,和一个(非常)很多关系,其他实体也有数百个属性。
我希望能够让用户传入一个查询参数,该参数允许他们只返回他们所关注的JSON响应体的字段。在过去,我使用过IBM的Rational Team Concert REST API,它们允许调用者传入XPath查询以选择他们想要返回的字段。他们的XPath集成还允许调用者在各个字段上应用过滤逻辑。例如,以下是该API的可能性:
workitem / workItem [creator / name =' Bob Sacremento'或者所有者/姓名=' Bob Sacremento'] /(id | summary)
^上述查询将返回其所有者或创建者的名称等于Bob Sacremento的所有workItem元素的id和summary字段。
workitem / workItem /(id | summary | comments [creator / name =' Bob Sacremento'] / content)
^上述查询将返回所有workItem元素的id,summary和comment contents字段。但它只会显示由Bob Sacremento创建的评论。
我想用我的API做类似的事情。在我编写自己的控制器之前,我想我会问是否有一个框架可以提供开箱即用的功能。看来Spring Data REST没有。
答案 0 :(得分:1)
您可以使用Spring Data REST定义已知的投影,这可用于创建端点,这些端点公开基础模型上的特定投影和/或允许调用者请求已知(预定义)投影通过URI例如foo/bar/bas?projection=summary
。
Spring Data REST docs中的更多细节。
但是,我不知道一个库将与Spring Data REST,JPA集成并允许调用者指定投影(例如,以SQL-esque SELECT语句的形式),然后应用这些投影代表你飞行。
我怀疑您需要在控制器中定义查询参数,例如select=a,b,c
,然后使用提供的值通过Spring Data JPA应用投影。
答案 1 :(得分:0)
GraphQl提供了此功能。