스프링 컨트롤러에서 파라미터를 전달받을 때 사용하는 객체로는
PathVariable, RequestParam, RequestBody가 있습니다.
이번 글에서는 각각의 쓰임을 간단히 알아보겠습니다.
✅ @PathVariable
PathVariable로 파라미터를 받을 경우의 간단한 URI 예시를 보겠습니다.
http://localhost:8080/order/10
해당 URL 요청을 @PathVariable을 사용해 처리하려면 다음과 같은 컨트롤러가 필요합니다.
@PostMapping("/order/{number}")
public String(@PathVariable Integer number) {
//... 중략
}
위와 같이 URI를 구성할 때 '리소스'만으로 요청 정보를 다 넘겨줄 수 없을 때
@PathVariable을 사용합니다.
예시의 URI에서 리소스는 'order'입니다.
'주문'이라는 리소스를 'POST' 방식으로 처리해야 하는데
'주문'이라는 리소스만으로는 요청 정보가 부족하기 때문에
몇 번 상품을 주문할 건지 URI 경로에 포함시켜 컨트롤러에 넘겨주는 것이죠.
✅ @RequestParam
@RequestParam은 기본적으로 PathVariable과 비슷합니다.
리소스 자체만으로 요청 정보가 충분하지 않을 때 사용합니다.
그렇다면 RequestParam은 언제 사용하고 PathVariable과의 차이는 무엇일까요?
똑같이 '주문' 리소스를 처리한다고 가정해보겠습니다.
상품번호 | 카테고리 번호 : 옷 | 상품번호 | 카테고리 번호 : 신발 |
1 | 1 | 1 | 2 |
3 | 1 | 2 | 2 |
4 | 1 | 5 | 2 |
테이블을 보면 현재 상품페이지에는 카테고리 번호가 존재하고
각 카테고리마다 고유의 상품번호가 존재합니다.
카테고리 내에서 상품번호는 중복될 수 없지만, 다른 카테고리의 상품과는 중복이 될 수 있는 상황입니다.
이 경우 PathVariable만으로 요청을 전달할 수 있을까요?
PathVariable의 경우 'order/10'과 같이 하나의 값만을 받아올 수 있기 때문에
'상품번호'와 '카테고리 번호'를 동시에 받아올 수 없습니다.
이럴 때 사용하는 것이 'RequestParam'입니다.
RequestParam은 Query String을 받아올 수 있는 객체입니다.
Query String이란 요청 URI의 물음표 뒤에 Key와 Value 값으로 구성된 문자열을 의미합니다.
따라서 신발 카테고리의 2번 상품을 주문하고 싶다면 다음과 같은 요청 URI를 만들 수 있습니다.
http://localhost:8080/order?catergory=2&num=2
요청을 받는 컨트롤러의 모습은 다음과 같습니다.
@PostMapping("/order")
public String order(@RequestParam Integer category, @RequestParam Integer num) {
//중략..
}
✅ @RequestBody
마지막으로 @RequestBody입니다.
RequestBody의 경우 앞선 두 객체와 조금 다릅니다.
RequestBody의 경우 HTTP 요청의 본문에 담긴 내용을 가져오는 객체로
JSON 형태의 데이터를 받을 때 사용합니다.
저는 프로젝트를 진행하면서 댓글 수정, 삭제 기능 들을 AJAX로 구현했고,
이 과정에서 데이터를 JSON 형태로 컨트롤러에 전송했습니다.
이런 데이터를 컨트롤러에서 받아올 때 RequestBody 객체를 사용했습니다.
간단한 예시를 보겠습니다.
간단한 JSON 형태의 데이터를 만들겠습니다.
{
"category" : 2,
"num" : 2
}
해당 데이터를 '/order'로 전송하는 경우
컨트롤러는 다음과 같이 구성합니다.
@PostMapping("/order")
public String order(@RequestBody Integer category, @RequestBody Integer num) {
//중략 ..
}
✅ 정리하며
언급한 객체들은 모두 함께 사용이 가능합니다.
@PathVariable과 @RequestParam을 함께 이용하여
'/order/10?category=2'와 같은 요청 URI를 만들 수도 있습니다.
해당 객체들을 적절하게 활용하여 리소스를 최소한으로 사용해
필요한 정보를 효율적으로 컨트롤러에 전달할 수 있는 URI를 만드는 것이
좋은 API URI를 만들 수 있는 방법입니다.
'내가 공부하려고 올리는 > 스프링' 카테고리의 다른 글
OAuth2.0으로 네이버/카카오 로그인 구현하기 (0) | 2022.07.14 |
---|---|
스프링 인터셉터(Interceptor) (0) | 2022.07.13 |
세션 저장소로 데이터베이스 사용하기(MySQL) (0) | 2022.07.12 |
프로젝트를 더욱 S.O.L.I.D 하게 수정해보기 (0) | 2022.07.12 |
나는 ServiceImpl을 잘 활용했는가? (0) | 2022.07.11 |
댓글