为什么Spring Data REST搜索会返回没有页面信息的页面?

时间:2019-06-28 17:21:46

标签: java spring spring-data-jpa

我正在使用Spring Data REST,并且试图对查询进行分页,但是我没有获得我期望的所有信息。

我的存储库定义为

public interface UserRepository extends PagingAndSortingRepository<User, String>
{
    List<User> findByNameContainingIgnoreCase(String name, Pageable pageable);
}

当我使用此URL查询此

http://localhost:43434/api/users/search/findByNameContainingIgnoreCase?name=mic

然后,我得到以下信息。它是分页的,如果我添加&page=2  然后它会遍历页面。但是,它不包含有关当前页面,页面总数等的信息。

{
  "_embedded" : {
    "users" : [ {
      "name" : "Michael",
      "_links" : {
        "self" : {
          "href" : "http://localhost:43434/api/users/1"
        }
    }, 
    ... more users
    ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:43434/api/users/search/findByNameContainingIgnoreCase?name=mic"
    }
  }
}

当我直接查看users时,即http://localhost:43434/api/users/时,我会得到一个方便的链接和页面部分(因为它被定义为PagingAndSortingRepository):

{
  ... first page of users...

  "_links" : {
    "first" : {
      "href" : "http://localhost:43434/api/users?page=0&size=20"
    },
    "next" : {
      "href" : "http://localhost:43434/api/users?page=1&size=20"
    },
    "last" : {
      "href" : "http://localhost:43434/api/users?page=49&size=20"
    }
    ... other links
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1000,
    "totalPages" : 50,
    "number" : 0
  }
}

为什么我在搜索页面上收到的分页信息与我在主收藏页面上收到的分页信息不同?实施方式不同吗?

1 个答案:

答案 0 :(得分:0)

啊,答案就在我in the documentation面前!

  

要在自己的查询方法中使用分页,需要更改该方法   签名以接受其他Pageable参数并返回Page   而不是列表。

问题是我返回了List。这将无提示地失败,因为它将显示分页的数据,但不会显示有关页面的元数据。您必须返回Page才能显示页面元数据。

public interface UserRepository extends PagingAndSortingRepository<User, String>
{
    Page<User> findByNameContainingIgnoreCase(String name, Pageable pageable);
}