@RequestParam vs @RequestBody vs @PathVariable – 언제 어떤 걸 써야 할까?

이건우·2025년 4월 1일

웹 프로그래밍

목록 보기
40/43

Controller로 들어온 여러 가지 값들!
뭔가 보냈는데.... 왜 못받지?? 또는 어떻게 받아야 하지...??
이러한 일을 줄여 봅시다!


@RequestParam – 쿼리 파라미터 받기

주로 GET 요청에 사용 되며,
?key=value 형태의 파라미터를 받을 때 사용됩니다!
추가로 required, defaultValue 설정을 하여
해당 값이 필수인지와, 기본값을 설정 할 수 있습니다.

ex) 요청

GET /search?keyword=스프링&sort=latest

ex) 서버

@GetMapping("/search")
public String search(@RequestParam(required = "false") String keyword,
                     @RequestParam(defaultValue = "recent") String sort) {
    return keyword + ", " + sort;
}

@PathVariable – URL 경로 변수 받기

RESTful API 설계에서 자주 사용되며,
URL 경로에 포함된 동적인 값을 변수로 매핑해 줍니다
@PathVariable("경로명") 형식으로 변수명과 다르게도## 설정 가능

ex) 요청

GET /users/5

ex) 서버

@GetMapping("/users/{id}/{name}")
public String getUser(@PathVariable Long id, @PathVariable("name") String userName) {
    return "조회한 사용자 ID: " + id;
}

@RequestBody – JSON 본문(body) 받기

POST, PUT, PATCH 요청에서 주로 사용되며,
요청의 Body에 포함된 JSON 데이터를 자바 객체로 변환해서 받을 수 있습니다.
JSON -> Java 객체로 자동 바인딩 하려면, 클래스의 필드와 JSON 키값을
일치시키는 매핑이 필수입니다!

ex) 요청

POST /users
Content-Type: application/json

{
  "name": "gunwoo",
  "email": "gunwoo@example.com"
}

ex) 서버

@PostMapping("/users")
public String createUser(@RequestBody UserDto user) {
    return user.getName() + "님 가입 완료!";
}

비교 요약

어노테이션주로 사용하는 HTTP 방식데이터 위치예시 URI
@RequestParamGET, POST(form)Query String/search?keyword=java
@PathVariableGETURL 경로/users/5
@RequestBodyPOST, PUT, PATCH요청 본문(JSON)POST /users + JSON Body

각 사용처

상황추천 방식
검색 필터, 옵션@RequestParam
특정 리소스 식별 (ex: userId)@PathVariable
회원가입, 글쓰기 등 구조적 데이터@RequestBody

각 상황에 맞는 방법으로 데이터를 보내고 받아 봅시다!

profile
새싹개발자

0개의 댓글