V-RIS 개발일지 (9) 음식점 조회 구현

KHJ·2022년 5월 5일
0

V-RIS 개발일지

목록 보기
9/15

가장 간단한 음식점 조회부터 구현하기 시작했다.

원하는 음식점을 클릭하면 음식점 이름, 사진, 주소, 전화번호, 메뉴가 나타나도록 할 예정이다.


음식점 사진은?

팀원이 api에 있는 좌표값으로 구글 지도에서 사진을 가져온 적이 있었는데 로드뷰 사진을 가져온 거라 땅바닥이 나왔었다는.. 이야기를 들었다.

사진은 어떻게 넣을지 아직 고민중..


Spring Data JPA

는 JpaRepository를 상속받은 인터페이스 하나만 생성해주면 CRUD를 처리할 수 있다



RestaurantRepository.java

@Repository
public interface RestaurantRepository extends JpaRepository<Restaurant, Integer> {
    
}

음식점 조회는 단순 READ이기 때문에 추가적인 코드를 작성할 필요 없이 인터페이스 생성만으로 구현이 가능하다.


Restaurant.java

@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name="restaurant")
public class Restaurant {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer resIdx;
    private String resName;
    private String resAddress;
    private String resNum;
    private String resCategory;
    private String resMenu;
    private Integer userIdx;
}

userIdx는 우리 기능 중 우리 db에 등록되지 않은 식당을 직접 등록할 수 있기 때문에 등록한 유저를 식별하기 위해 넣었다.


RestaurantJpaController.java

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/vegan-res")
public class RestaurantJpaController {
    @Autowired
    private RestaurantRepository restaurantRepository;

    // 음식점 조회
    @GetMapping("/restaurant/{id}")
    public Restaurant retrieveRes(@PathVariable int id){
        Optional<Restaurant> restaurant = restaurantRepository.findById(id);

        return restaurant.get();
    }
}

공통 주소인 /v1/vegan-res는 클래스 위에 @RequestMapping으로 설정해두고 클래스 안에서는 하위 주소만 설정해 주었다.



Optional 클래스를 사용한 이유?

optional은 'null일 수도 있는 객체'를 감싸는 일종의 wrapper 클래스이다.

Java의 이전 버전까지의 고질적인 문제였던 NullPointerException을 해결하기 위한 방책으로 등장했다고 한다.

optional 내부에는 null이 아닌 객체가 들어갈 수도 있고, null이 들어갈 수도 있기 때문에 null 처리를 매우 편리하게 할 수 있어 사용했다.


postman 실행 결과

0개의 댓글