根据查询参数过滤API响应json输出

时间:2017-08-22 02:08:58

标签: java spring spring-data-jpa spring-data-rest jsonapiframework

我使用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没有。

2 个答案:

答案 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提供了此功能。