我有一个简单的spring-boot应用程序,其中包含一个扩展的Repository,该Repository是一个简单的应用程序。JpaRespository
(进而延伸出 PagingAndSortingRepository
:
@RestController
@RepositoryRestResource
public interface CatalogueOrderRepository extends JpaRepository<CatalogueOrder, Long>,
QuerydslPredicateExecutor<CatalogueOrder> {
@GetMapping("/orderStatusNot")
Page<CatalogueOrder> findByOrderStatusNot(String orderStatus, Pageable page);
}
此外,还包括: JpaRepository
其中提供了基本的CRUDpagingsorting端点,我已经创建了一个自定义的queryendpoint,使用方法命名--。findByOrderStatusNot
.
中定义的默认findAll()方法。PagingAndSortingRepository
似乎返回一个 Page<T>
的定义,与我在 findByOrderStatusNot
. 然而,它们的实际JSON响应出现了很大的不同。
目录订单 返回大致。
_embedded:
catalogueOrders: [
catalogueOrder + _links
]
_links:
self
profile
search
page:
size
totalElements
totalPages
number
orderStatusNot 返回大致。
content: [
{catalogueOrder}...
]
pageable:
pageable:
sort:
sorted
unsorted
empty
offset
pageSize
pageNumber
paged
unpaged
last
totalElements
totalPages
size
number
sort:
sorted
unsorted
empty
numberOfElements
first
empty
为什么默认提供的端点会提供如此不同的结果?我如何才能使我的端点与 findAll()
?
第一个输出是 Hypertext Application Language (hal)
创立于 @RepositoryRestResource
注解方法。
另一个输出是一个简单的页面,从 QuerydslPredicateExecutor
丢失了所有的链接。
所以主要的问题是你把spring data rest和query-dsl-jpa混合在一起。它们返回的是不同的媒体类型。
如果你想坚持使用你的依赖关系,你可以尝试通过使用 @RepositoryRestResource(exported = false)
但我猜测回答还是会有所不同。
我建议去掉spring-data-rest的依赖性。只需使用一个控制器,指向findAll中的 "数据"。JpaRepository
和其他你想使用的方法。另一个好处也是你的应用更具有声明性,这意味着你必须明确地打开和描述你的端点。