Ich versuche, die Liste im Frühjahr in eine Seite umzuwandeln. Ich habe es mit konvertiert
new PageImpl (Benutzer, pageable, users.size ());
Aber jetzt habe ich Probleme mit dem Sortieren und der Paginierung. Wenn ich versuche, Größe und Seite zu übergeben, funktioniert die Paginierung nicht.
Hier ist der Code, den ich verwende.
Mein Controller
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);
}
Hier ist mein Benutzer Repo
public interface UserRepo extends JpaRepository<User, Integer>{
public List<User> findAllByProgramId(Integer programId);
Hier ist mein Dienst
public List<User> findAllByProgramId(Integer programId);
Ich habe die gleiche Frage gestellt. Ich habe das mit subList gelöst, das heißt:
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());
Wie in der reference documentation angegeben, unterstützen Spring Data-Repositorys die Paginierung von Abfragemethoden, indem sie einfach einen Parameter des Typs Pageable
deklarieren, um sicherzustellen, dass nur die für die angeforderte Page
erforderlichen Daten gelesen werden.
Page<User> page = findAllByProgramId(Integer programId, Pageable pageable);
Das würde ein Page
-Objekt mit der in Ihrem Pageable
-Objekt definierten Seitengröße/Einstellungen zurückgeben. Sie müssen keine Liste abrufen und dann versuchen, eine Seite daraus zu erstellen.
Sie sollten es tun, wie von den Dubonzis answer empfohlen.
Wenn Sie die Paginierung für ein gegebenes List
dennoch verwenden möchten, verwenden Sie 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
Wenn Sie sortieren möchten, verwenden Sie einen anderen PagedListHolder-Konstruktor mit einer MutableSortDefinition .
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());
}
//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;
}
}
Vielen Dank Jungs unten Code funktioniert in meinem Fall
int start = pageble.getOffset();
int end = (start + pageble.getPageSize()) > vehicleModelsList.size() ? vehicleModelsList.size() : (start + pageble.getPageSize());
Dies könnte die Lösung sein. Sortieren und Paginieren funktioniert auch so:
Regler:
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);
}
Bedienung:
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
Repository:
public interface UserRepo extends JpaRepository<User, Integer>{
public Page<User> findAllByProgramId(Integer programId, Pageable pageable);
}
Auf diese Weise können wir auch andere Entity-Seiten zurückgeben.
Haben Sie versucht, Ihr Repository auf PagingAndSortingRepository
zu erweitern?
public interface UserRepo extends PagingAndSortingRepository<Ticket, Integer> {
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
}
Bedienung
Page<User> findAllByProgramId(Integer programId, Pageable pageable);
Ich gehe davon aus, dass Sie eine Schnittstelle zum Dienst verwenden:
Es gibt eine Page
Implementierung dafür:
Page<Something> page = new PageImpl<>(yourList);