@RequestBody 사용 이유
896
작성한 질문수 3
ADD API 에서는 "@Request Param" 을 DTO 타입(CalculatorAddRequest request)으로 인자를 받으며 생략했는데
@RequestBody 는 DTO 타입으로 인자를 받았음에도 생략하지 않은 이유가 궁금합니다.
DTO 타입을 사용하는것이 쿼리에 있는 name 과 DTO 의 변수명이 동일한 것을 자동으로 매칭시켜 주는 것이라면
왜 BODY 에 있는 변수명과 DTO 의 변수명이 동일할 때는 @RequestBody 없이 매칭되지 않는지요...!
답변 2
0
안녕하세요! wnsqhr1230님! 🙂
좋은 질문 감사드립니다.
인프런 AI 인턴이 언급해준 것처럼, GET 요청과 POST 요청의 차이입니다!
GET 요청은 HTTP query parameter에서 데이터를 가져오고요!
POST 요청은 HTTP body에서 데이터를 가져오죠!
따라서 스프링은 어디에서 데이터를 가져와야 하는지 알아야 하고, @RequestBody 어노테이션은 생략하지 않는 것입니다. 🙏
이렇게 두 차이를 인지하시고 궁금증이 생기셨다면 아주 잘 하고 계시는거에요!! 👍 😊
답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙇
0
안녕하세요, 인프런 AI 인턴입니다.
wnsqhr1230님의 질문은 @RequestParam과 @RequestBody의 사용 및 차이점에 대한 궁금증으로 보입니다. 이에 대한 답변으로, 두 어노테이션이 처리하는 HTTP 요청 데이터의 종류가 다르기 때문입니다.
@RequestParam은 주로 GET 요청에서 사용되며, URL의 쿼리 파라미터들을 메소드의 파라미터로 매핑할 때 사용됩니다. 예를 들어, /user?id=123에서 id 값을 메소드의 파라미터로 가져오고자 할 때 사용합니다.
반면, @RequestBody는 주로 POST, PUT 요청에서 사용되며, HTTP 요청의 본문(body)에 있는 데이터를 Java 객체로 매핑할 때 사용됩니다. 즉, 클라이언트가 보내는 JSON 또는 XML과 같은 데이터를 Controller의 파라미터로 직접 매핑하기 위해 사용합니다.
@RequestParam과 달리 @RequestBody를 생략하지 않는 이유는, Spring에서 HTTP 요청 본문을 객체로 매핑하는 과정이 좀 더 복잡하기 때문입니다. HTTP 요청 본문에 담긴 JSON이나 XML과 같은 데이터를 Java 객체로 변환하기 위해서는 @RequestBody 어노테이션이 반드시 필요합니다. 이는 @RequestParam이 처리하는 쿼리 파라미터와 달리, 요청 본문의 데이터를 자동으로 매핑하기 위해 명시적으로 어노테이션을 선언해야 합니다.
질문하신 내용과 관련하여, 스프링에서 @RequestParam과 @RequestBody의 사용법 및 차이에 대해 자세히 설명한 다음 게시글이 도움이 될 수 있습니다:
- 어떻게 생성자 없이 number1과 number2에 값이 할당된건지 모르겠습니다.(DTO관련)에서는 DTO의 사용과 관련하여 @RequestBody의 역할을 설명하고 있습니다.
- 5~6강 질문이요에서도 @RequestParam과 DTO 객체 사용 시 매칭 관련 질문에 대한 답변을 찾아보실 수 있습니다.
이러한 차이점으로 인해 @RequestBody는 생략할 수 없으며, 클라이언트에서 서버로 데이터를 전송할 때 HTTP 요청 본문에 담긴 데이터를 처리하기 위해 필수적으로 사용됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
패키지 구분에 대해 궁금한게 있습니다
0
25
2
리액트 관련 질문이 있습니다.
0
65
2
스프링부트 버전
0
76
2
7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.
0
59
2
33강. UserLoanHistory의 관계성에 대한 질문
1
56
2
Java JDK 버전 문의의 건
0
135
2
ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.
0
90
3
h2 console 접속했을 테이블 질문
1
67
1
ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨
0
79
2
15강. updateUser() 질문
0
57
2
깃허브 질
0
84
2
여기까지 다 끝냈다고 하셨는데
0
79
2
왜안될까요
0
72
2
MySQL 창이안ㄴ뜹니다
0
59
2
포스트맨
0
52
1
spring 개념적인 질문
0
72
2
인텔리제이 샘플코드 실행 안됨 오류
0
142
2
aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다
0
86
1
마이그레이션 오류입니다.
0
175
3
Whitelabel Error Page 오류가 났습니다.
0
166
2
안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ
1
94
3
궁금한게 있습니다.
0
60
2
DTO 관련
0
70
2
궁금한게 있습니다!
0
69
2





