안녕하세요, 이번 글에서는 스프링부트에서 주로 사용되는 어노테이션인 @RequestBody, @RequestParam, @PathVariable, 그리고 @RequestPart에 대해 알아보겠습니다.
처음으로 팀프로젝트를 해보면서 프론트에서 HTTP요청에 대해서 처리해주는 컨트롤러에서 위 어노테이션을 사용하여 데이터를 받아 온다는 것을 알게 됐다.
근데 이 친구들이 언제 어떻게 사용하는지 참 했갈리더라고요..
한참을 해매다 공부해보고 조금이나마 알게 된 점을 적어보겠습니다.
@RequestBody, @RequestParam, @PathVariable, @RequestPart
위 어노테이션들은 Spring Framework에서 HTTP 요청의 다양한 부분을처리하기 위해 사용되는
어노테이션 이다.
1. @RequestBody
@RequestBody 어노테이션은 클라이언트 요청의 HTTP 본문에 포함된 값을 Java Object(객체)로 변환시켜주는 역할을 한다. 주로 JSON, XML과 같은 데이터를 받아올 때 사용되며, POST 요청을 처리할 때 유용.
위 코드를 보면 likes url을 통해 클라이언트로부터 받은 HTTP 요청의 본문(Body)을 LikeDto 클래스의 객체로 변환시키는 역할 을 해줌!!
{
"userId": 1,
"pollId": 2
}
프론트에서 위 같은 JSON 형식의 데이터를 보내오면 (aplication/json 형태)
@RequestBody 를 통해 위와 같이 likeDto 객체로 변환 시켜준다.
2.@RequestParam
@RequestParam 어노테이션은 클라이언트가 전송한 요청 파라미터를 컨트롤러 메소드의 매개변수에 바인딩합니다. 주로 GET 요청 시, Query Parameter를 처리할 때 사용
http://localhost:8080/search?title="성민"
프론트에서 쿼리 파라미터로 url에 값을 넣어 HTTP요청을 함
즉 @RequestParam Long id는 요청 URL의 쿼리 파라미터 중 'title'를 찾아 String 타입으로 변환한 후, 이 값을 메소드의 매개변수인 title에 바인딩 해준다.
@RequestParm은 파라미터가 필수적으로 들어오게 설정되어 있어서 파라미터가 들어오지 않는 경우 BadRequest가 발생 따라서 required = false를 주면 파라미터가 들어오지 않아도 문제 없음
3. @PathVariable
@PathVariable 어노테이션은 URI의 일부를 변수로 사용할 수 있게 해준다.
URL에서 필요한 데이터를 추출할 때 사용한다
http://localhost:8080/ok/john
URL의 'john' 부분을 nickname 변수에 바인딩합니다. 즉, nickname 변수의 값은 'john'이 됩니다
.
PathVariable로 데이터를 받아오면 그냥 단순한 문자열로 넘어옴!!
4. @RequestPart
@RequestPart 어노테이션은 멀티파트(Multipart) 요청에서 특정 파트를 참조하도록 합니다. 주로 파일 업로드 API를 구현할 때 사용. Post 요청 시에 JSON데이터와 Multipart 데이터를 함께 처리하기위해 사용한다.
Content-type을 'multipart/form-data' 해주고 요청 해야함.
본인은 투표를 만들 때 기입하는 여러가지 데이터와 이미지를 함께 받기 위해서 @RequestPart를 사용하였다.
이친구 때문에 참 고생을 많이 했는데 아직도 해결하지 못한 부분이 많다.