먼저, 고민했었던 내용은 '어떤식으로 keyword값을 받아올까'였다.
계속 사용하던 방식은 @RequestBody 형식으로 받아와서 이게 편했지만 구글이나 다른 사이트를 보면 검색기능은 거의 param을 사용해서 @RequestParam을 써서 keyword값을 받아오기로 했다.
Controller
// 유저 검색 기능
@GetMapping("/user/search")
public UserSearchResponseDto SearchUser(@RequestParam("keyword") UserSearchRequestDto dto) {
return userService.searchUser(dto);
}
- key값은 keyword로 지정하고 value값은 UserSearchRequestDto에서 받아오기로 했다.
Service
public UserSearchResponseDto searchUser(UserSearchRequestDto dto) {
List<User> user = userRepository.findByUsernameContaining(dto.getKeyword());
return new UserSearchResponseDto(user);
}
- UserRepository에 keyword를 포함한 username을 찾는 쿼리메서드를 작성해주었다.
UserSearchResponseDto
@Getter
public class UserSearchResponseDto {
private List<String> usernameList;
public UserSearchResponseDto(List<User> user) {
this.usernameList = user.stream()
.map(User::getUsername)
.toList();
}
}
- user DB에서 username에 대해서만 가져와야되기때문에 stream을 사용해서 처리해주었다.
UserSearchRequestDto
@Getter
@Setter
public class UserSearchRequestDto {
private String keyword;
public UserSearchRequestDto(String keyword) {
this.keyword = keyword;
}
}
** service에서 List가 하나도 없을 경우 예외처리 로직 작성 예정
반응형
'study > study_spring' 카테고리의 다른 글
[Spring] 로그인 기능 구현 - Redis를 이용한 토큰 재발급 (RefreshToken) (0) | 2023.11.25 |
---|---|
[S.A] TDL 프로젝트 (0) | 2023.07.17 |
[TIL] 좋아요 기능 구현 (Java) (0) | 2023.07.12 |
[TIL] 게시물 조회 메서드 (+댓글) (0) | 2023.07.11 |
[TIL] 회원가입 구현 (0) | 2023.06.26 |