본문 바로가기

Java/Spring

[Spring] @RestController의 파라미터(@PathVariable, @RequestBody)

- @RestController는 기존 @Controller에서 사용하던 일반적인 타입이나 사용자가 정의한 타입(클래스)을 사용한다.

- 여기에 추가로 몇 가지 어노테이션을 이용하는 경우가 있다.

    ∙@PathVariable : 일반 컨트롤러에서도 사용이 가능하지만 REST 방식에서 자주 사용된다. URL 경로의 일부를 파라미터로 사용할 떄 이용

    ∙@RequestBody : JSON 데이터를 원하는 타입의 객체로 변환해야 하는 경우에 주로 사용

 


@PathVariable

- REST 방식에서는 URL 내에 최대한 많은 정보를 담으려고 노력한다.

- 예전에는 '?' 뒤에 추가되는 쿼리 스트링(query string)이라는 형태로 파라미터를 이용해서 전달되던 데이터들이 REST 방식에서의 경로의 일부로 차용되는 경우가 많다.

 

- 스프링 MVC에서는 @PathVariable 어노테이션을 이용해서 URL 상에 경로의 일부를 파라미터로 사용할 수 있다.

 

- 위의 URL에서 '{ }'로 처리된 부분은 컨트롤러의 메서드에서 변수로 처리가 가능하다.

- @PathVariable은 '{ }'의 이름을 처리할 때 사용한다.

 

- REST 방식에서는 URL 자체에 데이터를 식별할 수 있는 정보들을 표현하는 경우가 많으므로 다양한 방식으로 @PathVariable이 사용된다.

- @PathVariable을 적용하고 싶은 경우에는 '{ }'을 이용해서 변수명을 지정하고, @PathVariable을 이용해서 지정된 이름의 변숫값을 얻을 수 있다.

- 값을 얻을 때에는 int, double과 같은 기본 자료형은 사용할 수 없다.

 


@RequestBody

- @RequestBody는 전달된 요청(request)의 내용(body)을 이용해서 파라미터 타입으로 변환을 요구한다.

- 내부적으로 HttpMessageConverter 타입의 객체들을 이용해서 다양한 포맷의 입력 데이터를 변환할 수 있다.

- 대부분의 경우에는 JSON 데이터를 서버에 보내서 원하는 타이브이 객체로 변환하는 용도로 사용되지만, 경우데 따라서는 원하는 포맷의 데이터를 보내고, 이를 해석해서 원하는 타입으로 사용하기도 한다.

 

+ TEST

 

POSTMAN으로 POST request
JSON 문자열이 Ticket(DTO) 타입의 객체로 변환되었다!

 


다양한 전송방식

- REST 방식의 데이터 교환에서 특이한 점은 기존의 GET/POST 외에 다양한 방식으로 데이터를 전달한다는 점이다.

처리작업 전송방식
Create POST
Read GET
Update PUT
Delete DELETE 

 

 

예시)

처리 작업 전송방식 URI
등록 POST  /members/new
조회 GET  /members/{id}
수정 PUT  /members/{id} + body (json 데이터 등)
삭제 DELETE  /member/{id}