对象列表 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"
}
],
我有一个 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"
}
],