自定义查询的响应格式与PagingAndSortingRepository不同。

问题描述 投票:0回答:1

我有一个简单的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()?

java jpa pagination spring-data-jpa spring-data-rest
1个回答
1
投票

第一个输出是 Hypertext Application Language (hal) 创立于 @RepositoryRestResource 注解方法。

另一个输出是一个简单的页面,从 QuerydslPredicateExecutor 丢失了所有的链接。

所以主要的问题是你把spring data rest和query-dsl-jpa混合在一起。它们返回的是不同的媒体类型。

如果你想坚持使用你的依赖关系,你可以尝试通过使用 @RepositoryRestResource(exported = false)但我猜测回答还是会有所不同。

我建议去掉spring-data-rest的依赖性。只需使用一个控制器,指向findAll中的 "数据"。JpaRepository 和其他你想使用的方法。另一个好处也是你的应用更具有声明性,这意味着你必须明确地打开和描述你的端点。

© www.soinside.com 2019 - 2024. All rights reserved.