对象列表 return 一个 Spring 页面如何与 Mongo 存储库?

How list of object return a Spring Page with Mongo repository?

我有一个 GET 请求,用户可以在其中传递图书代码列表作为参数。像这样:

@GetMapping("/books")
public ResponseEntity<Page<BooksView>> findAvailableBooks(@RequestParam(value = "codes") String[] codes

我需要获取这组代码并验证数据库中存在哪些书籍代码,以及它们是否有库存 return 它们作为 Spring 页面。我试过这个:

1)先检查代码数组是否填满

2) 如果是这样,对于数组中的每个代码,我会检查 mongo 存储库该代码是否存在于数据库中并且可用是否为真

3) 如果是这样,我将当前代码添加到列表中

4) 但我不知道这个逻辑是否有效(有没有更简单或更清晰的方法来做到这一点?)而且我也不知道如何处理这个列表,以便 return是一个页面

public Page<Book> findBooks(String[] codes) {

        if(codes.length > 0) {

            List<String> listOfCodes = null;

            for (String code : codes){

                if(repository.existsByCodeAndAvailable(Long.parseLong(code))){
                   listOfCodes.add(code);
                }
            }

        return ???

        }
}   

您可以像下面这样在存储库中编写自定义方法,

public interface BookRepository extends MongoRepository<Book, String> {

   Page<Book> findAllByCodeIn(String[] codes, Pageable pageable);
}

您可以从您的服务中调用自定义方法,

bookRepository.findAllByCodeIn(codes, PageRequest.of(0, 10))

我的数据库中有以下测试数据,

bookRepository.save(new Book("S001", "Java"));
bookRepository.save(new Book("S002", "Spring"));
bookRepository.save(new Book("S003", "Kotlin"));

不同的测试用例场景

GET http://localhost:8080/books?codes=

{
 "content": [],
 "pageable": {
 "sort": {
   "sorted": false,
   "unsorted": true,
   "empty": true
 },
 "offset": 0,
 "pageNumber": 0,
 "pageSize": 10,
 "paged": true,
 "unpaged": false
},
"totalPages": 0,
"totalElements": 0,
"last": true,
"size": 10,
"number": 0,
"numberOfElements": 0,
"first": true,
"sort": {
  "sorted": false,
  "unsorted": true,
  "empty": true
 },
 "empty": true
}

测试 2:

GET http://localhost:8080/books?codes=S001
{
 "content": [
   {
      "code": "S001",
      "name": "Java"
   }

],

测试 3:

GET http://localhost:8080/books?codes=S001,S002
{
  "content": [
   {
     "code": "S001",
     "name": "Java"
   },
   {
    "code": "S002",
     "name": "Spring"
   }
 ],