슬기로운슬기

먼저, 고민했었던 내용은 '어떤식으로 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가 하나도 없을 경우 예외처리 로직 작성 예정 

반응형
profile

슬기로운슬기

@스를기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!