Advertisement
AndreaCasaluci

Resource Pageable Search with Filter

Jun 25th, 2024
753
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.92 KB | None | 0 0
  1. // CONTROLLER:
  2.  
  3. @GetMapping
  4.     public ResponseEntity<Page<ResourceDto>> getResources(
  5.             @RequestParam int page,
  6.             @RequestParam int size,
  7.             @RequestParam(required = false) Map<String, String> filters) {
  8.         Page<ResourceDto> response=resourceService.search(page, size, filters);
  9.         return ResponseEntity.ok(response);
  10.     }
  11.  
  12.  
  13. // SERVICE:
  14.  
  15. public Page<ResourceDto> search(int page, int size, Map<String, String> filters){
  16.  
  17.         String tenantId=TenantContext.getCurrentTenant();
  18.         Pageable pageable= PageRequest.of(page, size, Sort.by("createdOn").descending());
  19.  
  20.         Specification<Resource> specification=(root, query, criteriaBuilder) -> {
  21.             Predicate predicate=criteriaBuilder.equal(root.get("tenantId"), tenantId);
  22.  
  23.             if(filters!=null){
  24.                 for(Map.Entry<String, String> filter:filters.entrySet()){
  25.                     String key = filter.getKey();
  26.                     String value = filter.getValue();
  27.  
  28.                     if(key.equals("name") || key.equals("description") || key.equals("artefact")|| key.equals("link") || key.equals("language")) {
  29.                         if(key.equals("artefact") || key.equals("link")){
  30.                             predicate=criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get(key), Boolean.parseBoolean(value)));
  31.                         }else{
  32.                             predicate=criteriaBuilder.and(predicate, criteriaBuilder.like(root.get(key), "%"+value+"%"));
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.  
  38.             return predicate;
  39.         };
  40.  
  41.         Page<Resource> resources = resourceRepository.findAll(specification, pageable);
  42.         List<ResourceDto> convertedResources=resourceMapper.listResourceToListResourceDto(resources.getContent());
  43.         return new PageImpl<>(convertedResources, pageable, resources.getTotalElements());
  44.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement