티스토리 뷰

가게 상세 가져오기


GET/restaurants/{id} 를 통해 가게 상세 정보를 가져온다.

 

1. 먼저 RestaurantCotroller.java 파일에 가게 상세 정보를 불러오는 detail method를 추가해준다.

예외를 처리하기 위해 throw Exception도 추가해주고 우선 id가 1인 것에 대해서만 불러온다.

Test를 실행해보면 'restaurants/1' 이라는 URL에 매핑되는 것이 없으므로 실패하게 된다.

 

 

2. 매핑이 가능하게 하기 위해 RestaurantController.java 파일에 method를 추가한다.

 

 

3. 가게 상세 정보를 불러오게 하기 위해서 RestaurantControllerTest.java 파일에 list method에서와 같은 접근을 하게 만들어준다.

RestaurantController.java 파일에서도 생성한 것을 그대로 출력하도록 method를 구성해준다.

 

Test를 실행할 경우 오류가 나지는 않는다.

그러나 id:1에 대해서 요청한 결과 값이 id:1004이고 이는 잘못된 것이다.

따라서 id 값에 따라 알맞은 결과를 넘겨주도록 처리해주어야 한다.

 

 

4. GetMapping에서 id:1이 들어갔던 부분을 {id}와 같이 바꿔준다.

또한, detail method의 인자로 id라는 변수를 알맞게 잡아준다.

 

 

5. id에 따라 알맞은 값이 넘어가는 것을 확인하기 위해 RestaurantControllerTest.java 파일의 detail method에 id가 2020인 restaurant을 추가해준다.

Test를 실행해보면 id가 2020인 경우에도 다음과 같은 똑같은 값이 출력되므로 실패하게 된다.

"{"name":"Bob zip","address":"Seoul","id":1004,"information":"Bob zip in Seoul"}"

 

 

6. id == 2020L, id == 1004L과 같이 id가 새로 생겨날 때마다 if문을 추가하는 것은 너무 비효율적이다.

따라서, List로 Restaurant을 관리하는 것이 효율적이다.

 

restaurants List에 가게 정보들을 추가해주고, stream API를 이용해 원하는 정보를 찾는다.

filter를 이용해 getId로 얻은 id와 우리가 얻고자 하는 id가 같은 경우에 출력해주도록 한다.

findFirst()는 나온 것들 중 첫 번째를 출력해주는 것이고, orElse()는 찾을 수 없는 id를 null로 처리해준다.

Test를 실행해보면 정상적으로 작동한다.

 

 

 

그러나 Restaurant 정보를 List로 관리하는데 가게 목록 출력할 때, 가게 상세 정보 출력할 때 모두 List를 사용하기 때문에 중복이 된다.

따라서 다음 포스트에서는 List 관리를 Controller와 상관 없는 곳인 Repository로 분리해주는 것에 대해 다룰 예정이다.

'Web > Spring Boot' 카테고리의 다른 글

Repository를 이용해 중복된 코드 제거하기  (0) 2020.05.02
Controller를 이용해 가게 목록 가져오기  (0) 2020.04.30
REST API  (0) 2020.04.29
TDD의 활용  (0) 2020.04.29
테스트 주도 개발  (0) 2020.04.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함