본문 바로가기
TIL/Spring

23.06.15

by J1-H00N 2023. 6. 15.

Spring 2주차 숙제

Query Methods 기능을 사용하여 내용(contents)에 특정 키워드가 포함된 메모를 조회하는 API를 구현

  • Controller를 통해 keyword를 Query String 방식으로 전달받아 메모를 조회하는 API를 추가합니다.
  • MemoService에 getMemosByKeyword 기능을 수행하는 메서드를 구현합니다.
  • ‘Postman’을 사용해서 테스트합니다.
  • 정렬 방법은 수정 시간을 기준으로 내림차순을 적용합니다.

 

우선 param 형태로 자료를 받기 위해 Controller에 get 메서드 생성

@GetMapping("/memos/contents")
    public List<MemoResponseDto> getMemosByKeyword(@RequestParam String keyword) { return  memoService.getMemosByKeyword(keyword); }

정렬을 하기 위한 메서드 MemoRepository 에 생성

List<Memo> findAllByContentsContainingOrderByModifiedAtDesc();

여기서 ContentsContaining은 Contents에 원하는 값이 포함되어 있는지 확인하는 메서드다.

위 메서드 실행할 메서드 생성

public List<MemoResponseDto> getMemosByKeyword(String keyword) {
        return memoRepository.findAllByContentsContainingOrderByModifiedAtDesc().stream().map(MemoResponseDto::new).toList();
    }

postman에서 체크하기 위해 실행을 하려는데 UnsatisfiedDependencyException에러 발생

@Autowired 사용시 동일한 타입의 Bean 객체를 2개 이상일 때 발생하는 에러라고 한다.

이 문제는 아닌 것 같고 어쩌면 ContentsContaining에서 오류가 생긴걸지도 모른다.

=> getMemosByKeyword가 String keyword를 받는 메서드인데 findAll~~메서드에 파라미터를 넣지 않아 오류가 생긴 듯하다. 다음과 같이 수정하니 제대로 작동한다.

List<Memo> findAllByContentsContainingOrderByModifiedAtDesc(String keyword);
    public List<MemoResponseDto> getMemosByKeyword(String keyword) {
        return memoRepository.findAllByContentsContainingOrderByModifiedAtDesc(keyword).stream().map(MemoResponseDto::new).toList();
    }

 

postMan에서는 http://localhost:8080/api/memos/contents?keyword= 를 붙여넣고 get방식으로 send하면 자동으로 Params에 keyword를 받는 공간이 생긴다. 여기서 제대로 작동하는 것을 체크했다.

http://localhost:8080/api/memos/contents?keyword=메모 이런식으로 체크도 가능하나 한글은 spacebar로 공백을 만든 뒤 다시 공백을 지우는 과정을 거쳐야 제대로 체크가 돼서 Params에 적는 것을 추천한다.

'TIL > Spring' 카테고리의 다른 글

23.06.20  (0) 2023.06.20
23.06.19  (0) 2023.06.19
23.06.14  (0) 2023.06.14
23.06.13  (0) 2023.06.13
23.06.12  (0) 2023.06.12