[Spring] REST 방식으로 전환 #02 @RestController에서의 파라미터
@PathVariable
REST 방식에서는 URL 내에 최대한 많은 정보를 담으려고 한다. 예전에는 '?' 뒤에 추가되는 쿼리 스트링(query string)이라는 형태로 파라미터를 이용해 전달되던 데이터들이 REST 방식에서는 경로의 일부로 차용되는 경우가 많다.
스프링 MVC에서는 @PathVariable 어노테이션을 이용해 URL 상에 경로의 일부를 파라미터로 사용할 수 있다.
http://localhost:8088/sample/{sno}/page/{pno}
위의 URL에서 {}로 처리된 부분은 컨트롤러의 메소드에서 변수로 처리가 가능하다. @PathVariable은 {}의 이름을 처리할 때 사용한다.
@GetMapping("/product/{cat}/{pid}")
public String[] getPath(
@PathVariable("cat") String cat,
@PathVariable("pid") Integer pid) {
return new String[] { "category : " + cat, "productid : " + pid};
}
|
cs |
@PathVariable을 사용하려면 {}을 이용해 변수명을 지정하고 지정된 이름의 변숫값을 얻는다. 값을 얻을 때엔 기본 자료형은 사용할 수 없다.
브라우저에서 /sample/product/bags/1234로 호출하면 cat과 pid 변수의 값으로 처리된다.
@RequestBody
@RequestBody는 전달된 요청(request)의 내용(body)을 이용해 해당 파라미터 타입으로 변환을 요구한다. 내부적으로 HttpMessageConverter 타입의 객체들을 이용해 다양한 포맷의 입력 데이터를 변환할 수 있다. 대부분의 경우 JSON 데이터를 서버에 보내 원하는 타입의 객체로 변환하는 용도로 사용되지만, 경우에 따라 원하는 포맷의 데이터를 보내 이를 해석해 원하는 타입으로 사용하기도 한다.
이때 메소드에는 @PostMapping을 적용시킨다. 이것은 @RequestBody가 말 그대로 요청한 내용을 처리하기 때문에 일반적인 파라미터 전달방식을 사용할 수 없기 때문이다.
다양한 전송 방식
REST 방식의 데이터 교환에서 가장 특이한 점은 기존의 GET/POST 외에 다양한 방식으로 데이터를 전달한다는 점이다.
HTTP 전송 방식은 아래와 같은 형태로 사용된다.
작업 | 전송방식 |
Create | POST |
Read | GET |
Update | PUT |
Delete | DELETE |
REST 방식은 URI와 같이 결합하므로 회원(member)이라는 자원을 대상으로 전송방식을 결합하면 다음과 같다.
작업 | 전송방식 | URI |
등록 | POST | /members/new |
조회 | GET | /members/{id} |
수정 | PUT | /members/{id} + body (json데이터 등 |
삭제 | DELETE | /members/{id} |