25/01/08
웹 사이트에서 페이지(1p, 2p)를 구성할 때 만드는 방법
@GetMapping("/todos")
public Page<Todo> getAll(Pageable pageable){
return todoRepository.findAll(pageable);
}
❓여러개의 Request Param을 받고 싶으면?
@GetMapping("/todos")
public Page<Todo> getAll(
@RequestParam(required = false) String keyword,
Pageable pageable){
return todoRepository.findAll(pageable);
}
이런식으로 작성해주면 된다.
🧐 근데! 보통은 1페이지가 첫페이지 아닌가? 하지만 위 코드를 실행해보면 page=0일때만 실행된다.
@GetMapping("/todos2")
public Page<Todo> getAll2(
@RequestParam(required = false) String keyword,
//기본 페이지는 1이니까
@RequestParam(defaultValue = "1") int page){
Pageable pageable = PageRequest.of(page-1, 10);
return todoRepository.findAll(pageable);
}
page라는 변수를 만들고 기본값이 1로 만들어준다.
Pageable은 0부터 시작이니까 page를 -1해줘야 사용자가 1로 입력해줘도 Pageable은 0부터 인식하게 된다.
pageRequest.of(시작점, 마지막점)
여기에 하드코딩으로 10이라고 들어가있다. 하드코딩은 좋지 않기 때문에 변수를 하나 더 받아준다.
@GetMapping("/todos2")
public Page<Todo> getAll2(
@RequestParam(required = false) String keyword,
//기본 페이지는 1이니까
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size){
Pageable pageable = PageRequest.of(page-1, size);
return todoRepository.findAll(pageable);
}
size는 한 페이지 안에 보여주는 객체의 개수이다.
근데! Entity는 사용자가 알면 안되는데?
사용자가 알게 되면, 수정을 할 때도 Entity를 건들이기 때문에 안된다!!
@GetMapping("/todos2")
public List<TodoResponse> getAll3(
@RequestParam(required = false) String keyword,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size){
Pageable pageable = PageRequest.of(page-1, size);
return todoRepository.findAll(pageable)
.getContent()
.stream()
.map(todo -> new TodoResponse(todo.getContent(),todo.getId())).toList();
}
늘 하던것 처럼 만들어준다.
getContent().stream()을 사용하던 방식은 get()으로 축약할 수 있다.
return todoRepository.findAll(pageable)
.get()
.map(todo -> new TodoResponse(todo.getContent(),todo.getId())).toList();