복붙노트

[SPRING] 봄에서 목록의 페이지로 변환

SPRING

봄에서 목록의 페이지로 변환

저는 봄에 목록을 페이지로 변환하려고합니다. 나는 그것을 사용하여 변환했다.

하지만 지금은 정렬과 페이지 매김 자체에 문제가 있습니다. 크기와 페이지를 전달하려고하면 페이지 매김이 작동하지 않습니다.

여기에 제가 사용하고있는 코드가 있습니다.

내 컨트롤러

    public ResponseEntity<User> getUsersByProgramId(
        @RequestParam(name = "programId", required = true) Integer programId Pageable pageable) {

    List<User> users = userService.findAllByProgramId(programId);
    Page<User> pages = new PageImpl<User>(users, pageable, users.size());

    return new ResponseEntity<>(pages, HttpStatus.OK);
}

내 사용자 Repo가 있습니다.

public interface UserRepo extends JpaRepository<User, Integer>{

public List<User> findAllByProgramId(Integer programId);

여기에 내 서비스가있다.

    public List<User> findAllByProgramId(Integer programId);

해결법

  1. ==============================

    1.나는 같은 질문을 만난다. 나는 이것을 subList를 사용하여 해결했다 :

    나는 같은 질문을 만난다. 나는 이것을 subList를 사용하여 해결했다 :

    int start = pageable.getOffset();
    int end = (start + pageable.getPageSize()) > users.size() ? users.size() : (start + pageable.getPageSize());
    Page<User> pages = new PageImpl<User>(users.subList(start, end), pageable, users.size());
    
  2. ==============================

    2.참조 문서에 명시된 바와 같이 Spring Data 저장소는 요청 된 페이지에 필요한 데이터 만 읽도록 Pageable 유형의 매개 변수를 선언함으로써 쿼리 메소드의 페이지 매김을 지원합니다.

    참조 문서에 명시된 바와 같이 Spring Data 저장소는 요청 된 페이지에 필요한 데이터 만 읽도록 Pageable 유형의 매개 변수를 선언함으로써 쿼리 메소드의 페이지 매김을 지원합니다.

    Page<User> page = findAllByProgramId(Integer programId, Pageable pageable);
    

    그러면 Pageable 객체에 정의 된 페이지 크기 / 설정으로 Page 객체가 반환됩니다. 목록을 가져온 다음 목록에서 페이지를 만들지 않아도됩니다.

  3. ==============================

    3.너는 두본지의 대답에 의해 충고 된 것처럼 그것을해야만한다.

    너는 두본지의 대답에 의해 충고 된 것처럼 그것을해야만한다.

    주어진리스트에 여전히 페이지 매김을 사용하려면 PagedListHolder를 사용하십시오.

    List<String> list = // ...
    
    // Creation
    PagedListHolder page = new PagedListHolder(list);
    page.setPageSize(10); // number of items per page
    page.setPage(0);      // set to first page
    
    // Retrieval
    page.getPageCount(); // number of pages 
    page.getPageList();  // a List which represents the current page
    

    소트 할 필요가있는 경우, MutableSortDefinition를 사용해, 다른 PagedListHolder 생성자을 사용합니다.

  4. ==============================

    4.저장소를 PagingAndSortingRepository로 확장하려고 시도 했습니까?

    저장소를 PagingAndSortingRepository로 확장하려고 시도 했습니까?

    public interface UserRepo extends PagingAndSortingRepository<Ticket, Integer> {
        Page<User> findAllByProgramId(Integer programId, Pageable pageable);
    }
    

    서비스

    Page<User> findAllByProgramId(Integer programId, Pageable pageable);
    

    서비스에 대한 인터페이스를 사용하고 있다고 가정합니다.

  5. ==============================

    5.

    //1) For a boot application create a paging repository interface
    public interface PersonRepository extends PagingAndSortingRepository<Person, 
    String> {
    // Common CURD method are automatically implemented
    }
    //2) create a service Interface
    public interface PersonService {
        Page<Person> listAllByPage(Pageable pageable); // Use common CURD findAll() method
        Page<Object> listSpecByPage(Pageable pageable, String x);
    
    }
    //3) create a service Impl Class of service interface
    @Service
    public class PersonServiceImpl implements PersonService {
    
        final PersonRepository personRepository;
    
        @Autowired
        PersonServiceImpl(PersonRepository personRepository){
        this.personRepository = personRepository;
        }
    
        @Override
        public Page<Person> listAllByPage(Pageable pageable) {
              return personRepository.findAll(pageable);
        }
        @Override
        public Page<Object> listSpecByPage(Pageable pageable, String path) {
            List<Object> objectlist = new ArrayList<Object>();
            // Do your process to get output in a list by using node.js run on a *js file defined in 'path' varriable
            Page<Object> pages1 = new PageImpl<Object>(objectlist, pageable, objectlist.size());
            return pages1;
        }
    
    }
    //4) write your controller
    public class PersonController {
    
        final PersonService personService;
    
        @Autowired
        PersonController( PersonService personService ){
            this.personService = personService;
        }
    
        @GetMapping("/get") // Use of findALL() function
        Page<Person> listed( Pageable pageable){
            Page<Person> persons = personService.listAllByPage(pageable);
            return persons;
        } 
        @GetMapping("/spec") // Use of defined function
        Page<Object> listSpec( Pageable pageable, String path){
            Page<Object> obj = personService.listSpecByPage(pageable, path);
            return obj;
       } 
    
    }
    
  6. ==============================

    6.

    Try This:
    
    public Page<Patient> searchPatientPage(SearchPatientDto patient, int page, int size){
            List<Patient> patientsList = new ArrayList<Patient>();
            Set<Patient> list=searchPatient(patient);
            patientsList.addAll(list);
            int start =  new PageRequest(page, size).getOffset();
            int end = (start + new PageRequest(page, size).getPageSize()) > patientsList.size() ? patientsList.size() : (start + new PageRequest(page, size).getPageSize());
    
            return new PageImpl<Patient>(patientsList.subList(start, end), new PageRequest(page, size), patientsList.size());
        }
    
  7. ==============================

    7.이를위한 페이지 구현이 있습니다.

    이를위한 페이지 구현이 있습니다.

    Page<Something> page = new PageImpl<>(yourList);
    
  8. ==============================

    8.이것이 해결책이 될 수 있습니다. 정렬 및 페이지 매김도 이렇게 작동합니다.

    이것이 해결책이 될 수 있습니다. 정렬 및 페이지 매김도 이렇게 작동합니다.

    제어 장치:

    public ResponseEntity<User> getUsersByProgramId(
       @RequestParam(name = "programId", required = true) Integer programId Pageable pageable) {
           Page<User> usersPage = userService.findAllByProgramId(programId, pageable);
           Page<User> pages = new PageImpl<User>(usersPage.getContent(), pageable, usersPage.getTotalElements());
    
           return new ResponseEntity<>(pages, HttpStatus.OK);
    }
    

    서비스:

    Page<User> findAllByProgramId(Integer programId, Pageable pageable);
    

    저장소:

    public interface UserRepo extends JpaRepository<User, Integer>{
           public Page<User> findAllByProgramId(Integer programId, Pageable pageable);
    }
    

    이렇게하면 엔티티의 다른 페이지도 반환 할 수 있습니다.

  9. ==============================

    9.내 경우에는 코드 아래의 사람들에게 감사하고 있습니다.

    내 경우에는 코드 아래의 사람들에게 감사하고 있습니다.

        int start = pageble.getOffset();
        int end = (start + pageble.getPageSize()) > vehicleModelsList.size() ? vehicleModelsList.size() : (start + pageble.getPageSize());
    
  10. from https://stackoverflow.com/questions/37749559/conversion-of-list-to-page-in-spring by cc-by-sa and MIT license