본문 바로가기
컴공/스프링 부트 (Spring boot)

스프링부트(Spring Boot) @RequestBody, @ReqeustParam, @PathVariable, @RequestPart 어노테이션 이해하기

by 만슨 2023. 12. 5.

 

안녕하세요, 이번 글에서는 스프링부트에서 주로 사용되는 어노테이션인 @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를 사용하였다. 

 

이친구 때문에 참 고생을 많이 했는데 아직도 해결하지 못한 부분이 많다.