[Spring] 검색 기능 구현하기

19·2022년 7월 26일
0

Spring

목록 보기
9/29
post-custom-banner

원인

검색 기능이 있으면 좋을 것 같다는 피드백을 반영해, 구현해보기로 했다.


적용

| PostController.java

...
// 게시글 검색
@GetMapping("/post/search")
public ResponseEntity<List<PostReadResponseDto>> searchPost(@RequestParam String query) {
    return postService.searchPost(query);
}
  • 클라이언트에서 넘어올 검색어를 'query'라는 변수로 받고 서비스에 넘겨주었다.

| PostService.java

// 게시글 검색
public ResponseEntity<List<PostReadResponseDto>> searchPost(String query) {
    // 검색값이 포함되어 있는 게시글을 가져옮
    List<Post> searchPosts = postRepository.findAllByTitleContainingOrderByCreateDateDesc(query);
    List<PostReadResponseDto> searchList = new ArrayList<>();
    for (Post post : searchPosts) {
        searchList.add(PostReadResponseDto.builder()
                .status(StatusMessage.SUCCESS)
                .id(post.getId())
                .title(post.getTitle())
                .content(post.getContent())
                .meetingType(post.getMeetingType())
                .contact(post.getContact())
                .period(post.getPeriod())
                .recruitmentState(post.isRecruitmentState())
                .hits(post.getHits())
                .postDate(post.getLastModifiedDate())
                .writer(post.getMember().getNickname())
                .build()
        );
    }
    return new ResponseEntity<>(searchList, HttpStatus.valueOf(StatusCode.SUCCESS));
}    
  • Controller에서 넘어온 'query'가 게시글 제목에 포함되어 있는 게시글을 DB에서 가져와서 반환해주었다.

| PostRepository.java

public interface PostRepository extends JpaRepository<Post, Long> {
    List<Post> findAllByTitleContainingOrderByCreateDateDesc(String query);
	...
  • 'query'가 제목에 포함되어 있는 게시글 생성날짜 기준 내림차순으로 가져온다.

서버에서 검색기능을 구현하는 것은 어렵지 않았다.
다만, 프론트에서 검색창의 위치와, 엔터치면 검색하도록 하고, 등등 프론트적인 부분에 시간을 더 쏟았댜

검색 기능 구현 (클라이언트)

profile
하나씩 차근차근
post-custom-banner

0개의 댓글