自定义查询的响应格式不同于 PagingAndSortingRepository
Response format from Custom Query different from PagingAndSortingRepository
我有一个简单的 spring-boot 应用程序,它包含一个扩展 JpaRespository
的存储库(它又扩展了 PagingAndSortingRepository
:
@RestController
@RepositoryRestResource
public interface CatalogueOrderRepository extends JpaRepository<CatalogueOrder, Long>,
QuerydslPredicateExecutor<CatalogueOrder> {
@GetMapping("/orderStatusNot")
Page<CatalogueOrder> findByOrderStatusNot(String orderStatus, Pageable page);
}
除了提供基本 CRUD/paging/sorting 端点的 JpaRepository
之外,我还使用方法命名创建了自定义 query/endpoint - findByOrderStatusNot
.
PagingAndSortingRepository
中定义的默认 findAll() 方法似乎 return 和 Page<T>
,与我在 findByOrderStatusNot
中定义的相同。然而,他们的实际 JSON 反应似乎大不相同。
/catalogueOrders returns 大致:
_embedded:
catalogueOrders: [
catalogueOrder + _links
]
_links:
self
profile
search
page:
size
totalElements
totalPages
number
orderStatusNot returns 大致:
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
编辑的一个简单页面 return,缺少所有链接。
所以主要问题是您将 spring 数据 rest 与 query-dsl-jpa 混合在一起。他们 return 不同的媒体类型。
如果您想坚持使用您的依赖项,您可以尝试使用 @RepositoryRestResource(exported = false)
禁用 hal,但我想响应仍然会有所不同。
我建议摆脱 spring-data-rest 依赖。只需使用指向 findAll 的控制器
JpaRepository
和您要使用的其他方法。另一个优势还在于您的应用程序更具声明性,这意味着您必须明确打开并描述您的端点。
我有一个简单的 spring-boot 应用程序,它包含一个扩展 JpaRespository
的存储库(它又扩展了 PagingAndSortingRepository
:
@RestController
@RepositoryRestResource
public interface CatalogueOrderRepository extends JpaRepository<CatalogueOrder, Long>,
QuerydslPredicateExecutor<CatalogueOrder> {
@GetMapping("/orderStatusNot")
Page<CatalogueOrder> findByOrderStatusNot(String orderStatus, Pageable page);
}
除了提供基本 CRUD/paging/sorting 端点的 JpaRepository
之外,我还使用方法命名创建了自定义 query/endpoint - findByOrderStatusNot
.
PagingAndSortingRepository
中定义的默认 findAll() 方法似乎 return 和 Page<T>
,与我在 findByOrderStatusNot
中定义的相同。然而,他们的实际 JSON 反应似乎大不相同。
/catalogueOrders returns 大致:
_embedded:
catalogueOrders: [
catalogueOrder + _links
]
_links:
self
profile
search
page:
size
totalElements
totalPages
number
orderStatusNot returns 大致:
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
编辑的一个简单页面 return,缺少所有链接。
所以主要问题是您将 spring 数据 rest 与 query-dsl-jpa 混合在一起。他们 return 不同的媒体类型。
如果您想坚持使用您的依赖项,您可以尝试使用 @RepositoryRestResource(exported = false)
禁用 hal,但我想响应仍然会有所不同。
我建议摆脱 spring-data-rest 依赖。只需使用指向 findAll 的控制器
JpaRepository
和您要使用的其他方法。另一个优势还在于您的应用程序更具声明性,这意味着您必须明确打开并描述您的端点。