본문 바로가기
내가 공부하려고 올리는/스프링

PathVariable, RequestParam, RequestBody(스프링에서 파라미터 받기)

by 결딴력 2022. 7. 12.
반응형

 

 

스프링 컨트롤러에서 파라미터를 전달받을 때 사용하는 객체로는

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를 만들 수 있는 방법입니다.

 

 

 

반응형

댓글