【问题标题】:Response format from Custom Query different from PagingAndSortingRepository自定义查询的响应格式与 PagingAndSortingRepository 不同
【发布时间】:2020-08-27 17:59:54
【问题描述】:

我有一个简单的 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/分页/排序端点的 JpaRepository 之外,我还使用方法命名创建了一个自定义查询/端点 - findByOrderStatusNot

PagingAndSortingRepository 中定义的默认 findAll() 方法似乎返回 Page&lt;T&gt;,与我在 findByOrderStatusNot 中定义的相同。但是,它们的实际 JSON 响应似乎大不相同。

/catalogueOrders 大致返回:

_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() 一致?

【问题讨论】:

  • Page&lt;CatalogueOrder&gt; findByOrderStatusNot(String orderStatus, Pageable page); 有没有回复你??
  • 如果我尝试 /catalogueOrders/search/findByOrderStatusNot?orderStatus=delayed 它会返回与 /catalogueOrders 相同的输出,请参阅code on github page-find-all

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


【解决方案1】:

第一个输出是从@RepositoryRestResource 注释方法创建的Hypertext Application Language (hal)

另一个输出是从QuerydslPredicateExecutor 返回的一个简单页面,缺少所有链接。

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

如果你想坚持你的依赖,你可以尝试使用 @RepositoryRestResource(exported = false) 禁用 hal,但我猜响应仍然会有所不同。

我建议摆脱 spring-data-rest 依赖。只需使用指向 findAll 的控制器 JpaRepository 和其他你想使用的方法。另一个优点是您的应用程序更具声明性,这意味着您必须显式打开和描述您的端点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 2019-10-31
    • 2016-12-13
    • 2019-07-23
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多