유정잉

@RequestParam vs @PathVariable vs @RequestBody 본문

개발자 공부/♡ Spring XML

@RequestParam vs @PathVariable vs @RequestBody

유정♡ 2025. 2. 4. 15:55

Spring MVC에서 클라이언트가 보낸 데이터를 Controller에서 받는 방법은 3가지!
각각 어떤 방식으로 데이터를 주고받는지 JSP 연동까지 자세히 설명할게!


🔥 1️⃣ @RequestParam, @PathVariable, @RequestBody 차이점

어노테이션데이터 전달 방식사용 예제요청 방식

@RequestParam 쿼리 스트링 값 받기 (?key=value) /user?name=Tom&age=25 GET, POST
@PathVariable URL 경로 값을 받기 (/{value}) /user/Tom/25 GET
@RequestBody JSON 데이터를 객체로 변환하여 받기 { "name": "Tom", "age": 25 } POST, PUT

즉, @RequestParam은 ?key=value로 전달, @PathVariable은 URL 경로에서 받음, @RequestBody는 JSON 데이터를 객체로 변환하여 받음!


🔥 2️⃣ @RequestParam 사용법 (쿼리 스트링 방식)

💡 클라이언트가 ?name=Tom&age=25 같은 형식으로 데이터를 보낼 때 사용!
💡 주로 GET 요청에서 검색, 필터링, 페이지 번호 전달 시 사용됨


✅ @RequestParam을 사용한 Controller 코드

java
복사편집
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class UserController { @GetMapping("/user") public String getUser( @RequestParam("name") String userName, // 쿼리 스트링에서 name 값을 가져옴 @RequestParam(value = "age", required = false, defaultValue = "20") int userAge, // age는 필수가 아니며 기본값 20 Model model ) { model.addAttribute("name", userName); model.addAttribute("age", userAge); return "user"; // user.jsp로 이동 } }

사용자가 http://localhost:8080/user?name=Tom&age=25 로 접속하면 실행됨
컨트롤러는 name=Tom, age=25 값을 받아서 user.jsp로 전달!


✅ user.jsp (JSP에서 데이터 받기)

jsp
복사편집
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>사용자 정보</title> </head> <body> <h1>사용자 정보</h1> <p>이름: ${name}</p> <p>나이: ${age}</p> </body> </html>

JSP에서 ${name}, ${age}를 사용하여 Controller에서 보낸 데이터를 출력


✅ 실행 결과 (http://localhost:8080/user?name=Tom&age=25)

markdown
복사편집
---------------------------- | 사용자 정보 | | 이름: Tom | | 나이: 25 | ----------------------------

쿼리 스트링(?name=Tom&age=25)을 사용해서 데이터를 전달받고, JSP에서 출력!


🔥 3️⃣ @PathVariable 사용법 (URL 경로 값 전달)

💡 URL 경로에 데이터를 직접 포함할 때 사용 (/user/Tom/25 형태)
💡 RESTful API에서 특정 리소스를 조회할 때 주로 사용됨


✅ @PathVariable을 사용한 Controller 코드

java
복사편집
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @Controller public class UserController { @GetMapping("/user/{name}/{age}") // URL 경로에서 값 가져오기 public String getUser( @PathVariable("name") String userName, // URL에서 name 값 가져오기 @PathVariable("age") int userAge, // URL에서 age 값 가져오기 Model model ) { model.addAttribute("name", userName); model.addAttribute("age", userAge); return "user"; // user.jsp로 이동 } }

사용자가 http://localhost:8080/user/Tom/25 로 접속하면 실행됨!


✅ 실행 결과 (http://localhost:8080/user/Tom/25)

markdown
복사편집
---------------------------- | 사용자 정보 | | 이름: Tom | | 나이: 25 | ----------------------------

URL 경로(/user/Tom/25)를 사용해서 데이터를 전달받고, JSP에서 출력!


🔥 4️⃣ @RequestBody 사용법 (JSON 데이터 전달)

💡 클라이언트가 JSON 데이터를 서버로 보낼 때 사용 (POST, PUT 요청)
💡 주로 REST API에서 JSON 데이터를 받을 때 사용됨


✅ @RequestBody를 사용한 Controller 코드

java
복사편집
import org.springframework.web.bind.annotation.*; @RestController public class UserController { @PostMapping("/user") public String createUser(@RequestBody User user) { // JSON 데이터를 객체로 변환 return "✅ 사용자 생성 완료: " + user.getName() + ", 나이: " + user.getAge(); } }

사용자가 POST /user 요청을 JSON 데이터와 함께 보내면 실행됨
클라이언트가 JSON 데이터를 보내면, Spring이 User 객체로 자동 변환!


✅ 클라이언트에서 JSON 데이터 전송 (Postman or AJAX)

json
복사편집
{ "name": "Tom", "age": 25 }

서버에서 @RequestBody User user를 통해 JSON 데이터를 User 객체로 자동 변환


✅ 실행 결과 (POST /user)

복사편집
✅ 사용자 생성 완료: Tom, 나이: 25

클라이언트가 JSON 데이터를 보내면 Controller에서 객체로 변환하여 처리 가능!


🔥 5️⃣ @RequestParam vs @PathVariable vs @RequestBody 비교

비교 항목@RequestParam (쿼리 스트링)@PathVariable (URL 경로 값)@RequestBody (JSON 데이터)

데이터 전달 방식 ?key=value 형식 {}로 경로에 직접 포함 JSON 데이터
예제 URL /user?name=Tom&age=25 /user/Tom/25 POST /user + JSON 데이터
요청 방식 GET, POST GET POST, PUT
RESTful API 적합도 ❌ 권장되지 않음 ✅ RESTful API에서 사용 ✅ RESTful API에서 JSON 데이터 전송 시 사용
사용 예제 검색, 필터링 (?keyword=Spring) 특정 리소스 조회 (/user/123) 데이터 저장, 수정

검색, 필터링처럼 선택적으로 데이터를 전달해야 하면 @RequestParam 사용!
RESTful API에서 특정 리소스를 조회할 때는 @PathVariable 사용!
RESTful API에서 JSON 데이터를 주고받을 때는 @RequestBody 사용!


🔥 6️⃣ 결론

1️⃣ @RequestParam → ?key=value 형식으로 데이터를 전달받을 때 사용 (GET)
2️⃣ @PathVariable → URL 경로에 데이터를 포함할 때 사용 (GET)
3️⃣ @RequestBody → JSON 데이터를 받아서 객체로 변환할 때 사용 (POST, PUT) 🚀

728x90