@RequestBody, @RequestParam, @PathVariable (요청 매핑 어노테이션)

장근창·2025년 3월 28일
post-thumbnail

@RequestBody

Spring Boot에서 JSON 본문을 받을 때에는 반드시 @RequestBody로 받아야 하고, 그걸 받을 객체가 필요하다!

예를 들어,

@PostMapping("/login")
public ResponseEntity<User> login(@RequestParam String teamName,
                                   @RequestParam String userName) {
    User user = userService.login(teamName, userName);
    return ResponseEntity.ok(user);
}

이런 식으로 JSON 본문을 @RequestParam으로 받으면 오류가 난다.

그래서 그걸 받을 객체를 만들고,

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserRequest {
    private String teamName;
    private String userName;
}

아래와 같이 @RequestBody로 받아주면 된다!

@PostMapping("/login")
    public ResponseEntity<User> login(@RequestBody UserRequest request) {
        User user = userService.loginOrCreateUser(request.getTeamName(), request.getUserName());
        return ResponseEntity.ok(user);
    }

특징

  • 데이터가 많을 때 구조화해서 전송 가능 (JSON 형태)

  • 보안적, 가독성 좋고, 복잡한 요청에 적합

  • 대부분의 POST는 @RequestBody 쓰는 것이 정석

HTTP 메서드별 @RequestBody 사용 가능성

POST: 주로 사용 (폼 제출, 로그인, 등록 등)

PUT: 많이 사용 (전체 수정)

PATCH: 자주 사용 (부분 수정)

DELETE: 가능은 하나 잘 안 씀. 표준이 아니기 때문.

GET: 불가능 (HTTP 스펙 상 Body 없음)

@RequestParam

쿼리 파라미터에서 값을 받아올 때 사용.

보통 URL에 ?key=value 형태로 붙어있는 데이터

예시

GET /api/users?teamName=TeamA&userName=철수

특징

  • 주로 GET이나 DELETE에서 많이 사용

  • URL이 깔끔하지 않을 수도 있음

  • 데이터가 노출되기 쉬움

@PathVariable

URL 경로 자체에 포함된 값을 변수처럼 가져오는 방식

예시

DELETE /api/users/logout/TeamA/철수

특징

  • REST API 스타일에 가장 잘 어울림

  • 리소스를 명확하게 식별할 때 좋음

  • URL만 보고도 어떤 데이터를 삭제/조회하는지 명확

추천 사용법

  • 데이터 조회 (간단한 필터) -> @RequestParam

  • 객체 전달, 로그인, 등록 등 -> @RequestBody

  • 특정 리소스 명시 삭제/조회 -> @PathVariable

0개의 댓글