매번 할때마다 조금씩 까먹어서 Page로 표현하는법 기록하기
기존 List로 모든 게시글 불러오는 메서드
Controller
@GetMapping
public ResponseEntity<ApiResponse<List<BoardsDetailResponseDto>>> getboardss(){
List<BoardsDetailResponseDto> dtoList = boardsService.getBoardss();
return ResponseEntity.ok(ApiResponse.success(dtoList));
}
Service
public List<BoardsDetailResponseDto> getBoardss(){
List<Boards> boardsList = boardsRepository.findAll();
List<BoardsDetailResponseDto> dtos = new ArrayList<>();
for (Boards boards : boardsList) {
BoardsDetailResponseDto dto = new BoardsDetailResponseDto(boards);
dtos.add(dto);
}
return dtos;
}
-> for문은 Stream 으로 변환 가능
return boards.stream()
.map(BoardsDetailResponseDto::new)
.collect(Collectors.toList());
Page
나타내는 값이 조금은 다르지만 Page 를 써서 가져왔다.
Controller
@GetMapping("/my-boards")
public ResponseEntity<ApiResponse<Page<BoardsDetailResponseDto>>> getMyBoards(@AuthenticationPrincipal AuthUser authUser,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "5") int size){
return ResponseEntity.ok(ApiResponse.success(boardsService.getMyBoards(authUser,page,size)));
}
Service
public Page<BoardsDetailResponseDto> getMyBoards(AuthUser authUser, int page, int size) {
//사용자 찾기
User user = userService.findUser(authUser.getUserId());
//페이지 요청 객체 생성 (페이지 숫자가 실제로는 0부터 시작하므로 원하는 숫자 -1을 입력해야 해당 페이지가 나온다)
Pageable pageable = PageRequest.of(page -1, size);
//해당 유저가 쓴 게시글 페이지네이션해서 가져오기
Page<Boards> boards = boardsRepository.findAllByUserId(user.getId(),pageable);
//찾은게시글들 responseDto에 맞춰서 반환하기
return boards.map(BoardsDetailResponseDto::new);
}
int page : 현재 요청한 페이지 이며 페이지네이션에서 첫페이지는 0이다 그러므로 pageable 을 생성할때 page -1 을 해줘야 원하는 위치의 페이지를 조회할 수 있다.
int size : 한페이지에 나타낼 페이지의 수
Pageable : 페이지네이션을 위한 정보를 담고 있는 인터페이스
PageRequest : Pageable 인터페이스의 구현 클래스, 페이지 번호와 페이지 크기를 기반으로 페이지 요청을 생성
map : page 객체의 메서드로 페이지내 각요소에 대해 변환 작업을 수행
BoardsDetailResponseDto::new : Dto 생성자를 참조하여 ,Boards객체를 입력 받아 Dto 객체를 생성하는 역할, new - 해당 클래스의 생성자를 호출하는 shorthand
자주 하는것도 까먹을 수 있으니 기록하는 습관 가지자
'java 배우기 > TIL' 카테고리의 다른 글
| 게시글 조회시 페이지 사용할때 생기는 경고 문구 (0) | 2024.10.23 |
|---|---|
| REST API 네이밍 원칙 (1) | 2024.10.23 |
| 카드 조회수에 redis 사용해보기 (0) | 2024.10.17 |
| 여러 역할이 부여된 유저찾기 오류 (0) | 2024.10.16 |
| docker로 redis 실행중 생긴 오류 (0) | 2024.10.15 |