Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将投影应用于Spring数据REST查询方法资源?_Java_Spring_Rest_Projection_Spring Data Rest - Fatal编程技术网

Java 如何将投影应用于Spring数据REST查询方法资源?

Java 如何将投影应用于Spring数据REST查询方法资源?,java,spring,rest,projection,spring-data-rest,Java,Spring,Rest,Projection,Spring Data Rest,我使用的是SpringDataREST2.1.4.RELEASE 我创造 实体预订 它的REST存储库(扩展crudepository)名为BookingRepository 用于返回其链接实体的投影预订详细信息(用@projection(name=“details”,types=Booking.class)注释)爆炸,如资源,活动,申请人等 客户端通过../rest/bookings获取所有预订,JSON响应包括链接实体的链接。如果它添加了?projection=details,则链接的实

我使用的是SpringDataREST2.1.4.RELEASE

我创造

  • 实体
    预订
  • 它的REST存储库(扩展
    crudepository
    )名为
    BookingRepository
  • 用于返回其链接实体的投影
    预订详细信息
    (用
    @projection(name=“details”,types=Booking.class)
    注释)爆炸,如
    资源
    活动
    申请人
客户端通过
../rest/bookings
获取所有预订,JSON响应包括链接实体的链接。如果它添加了
?projection=details
,则链接的实体将被分解并返回。这太棒了

现在,我将此自定义方法添加到存储库中:

List<Booking> findByApplicant(@Param("applicant") Person applicant);

总之,自定义搜索方法(
findBy*
)从不返回投影。除非您使用
@RepositoryRestResource(extractprojection=BookingDetails.class)
注释存储库,但这会导致一些问题,首先客户端必须始终使用相同的投影。我们如何允许用户也使用
findBy*
方法使用投影?

我已经验证了使用Spring数据REST 2.2.1的方法,所以请更新它。确保您的客户机按照您的意愿实际发送请求的参数。在调试时,我发现,如果不显式引用URI,例如cURL会删除查询参数。因此:

curl http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details
不会发送任何查询参数。一旦你引用了URI,它就会

curl 'http://localhost:8080/orders/search/findByApplicant?applicant=5&projection=details'
对于越来越受欢迎的人来说,情况也是如此。使用它所需的语法是:

http :8080/orders/search/findByApplicant applicant==5 projection==details

如果您不能让它以这种方式工作,那么查看一个正在运行的示例项目就很酷了。

../rest/bookings/search/findByApplicant?applicator=5这样的URL不是很RESTful。关于
../rest/bookings?applicator=5
?虽然这与最初的海报问题完全无关,但这个URI有什么不可保留的?确切地说,您不能根据定义来判断URI的RESTfull,因为它仅仅取决于通过URI公开的资源是否遵循HTTP语义。资源的id是
/foo
还是
/conquer/the/world
完全无关。这就是说,SpringDataREST利用超媒体让客户机导航到资源,因此,如果资源的ID变得不那么重要,那么结构就会变得不相关:)。URL闻起来像RPC。当然,超媒体是件好事。URI没有气味,它们是不透明的东西。重要的是资源及其行为:)。非常感谢!我很愚蠢:几天前我用Spring数据REST 2.1.4测试了这个,但没有成功;然后我更新到2.2.1,没有进行测试(我只测试了新的
摘录投影
)。既然我测试了。。我知道它是有效的!!我不认为这可以在我需要的时候实现:现在我纠正我的问题。谢谢,很抱歉浪费了你的时间!别担心。我也觉得有点愚蠢,用一个简单的、无引号的
cURL
看不到任何参数。另外,当这些问题成为其他遇到相同问题的人的规范参考时,仍然可以得到这些问题:)。很高兴它对你有用!嗨,我遇到了类似的情况。上述解决方案适用于自定义查询方法。但是如何为内置方法添加投影呢。例如,如果我有一个订单实体,/orders将为我提供应用了投影的所有订单。但当我使用self.href链接(例如/orders/58fa7da00498e41f81a9f806)搜索单个订单时,不会应用投影。我怎样才能做到这一点?
http :8080/orders/search/findByApplicant applicant==5 projection==details