[SpringBoot] Controller와 HTTP 매개 변수

김선형·2025년 9월 8일

Java

목록 보기
17/27

@RestController

RESTful 웹 서비스를 만들 때 사용하는 핵심 어노테이션. 클래스 내의 모든 메서드가 HTTP 요청을 받아서 JSON, XML 등의 형태로 응답을 자동으로 반환한다.

HTTP 메서드어노테이션설명사용 예시
GET@GetMapping리소스 조회, 데이터 요청@GetMapping("/users")
POST@PostMapping리소스 생성, 데이터 전송 및 등록@PostMapping("/users")
PUT@PutMapping리소스 전체 수정@PutMapping("/users/{id}")
PATCH@PatchMapping리소스 일부 수정@PatchMapping("/users/{id}")
DELETE@DeleteMapping리소스 삭제@DeleteMapping("/users/{id}")
(모든 메서드)@RequestMapping모든 HTTP 메서드에 사용 가능
- method로 지정
@RequestMapping(value="/users",
method=RequestMethod.GET)

파라미터 바인딩 어노테이션

클라이언트가 보낸 HTTP 요청의 다양한 정보 (URL 경로 변수, 쿼리 파라미터, 요청 본문, etc.)를 컨트롤러 메서드의 매개 변수에 손쉽게 연결해주는 역할을 한다.

@PathVariable

URL 경로의 값을 메서드 파라미터로 바인딩한다.

@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {
    // /users/100 -> id = 100
}
// URL의 `{id}` 부분이 파라미터로 전달된다.
// 변수명이 같으면 `@PathVariable Long id`처럼 이름을 생략할 수 있다.

@RequestParam

쿼리 파라미터, 폼 데이터 (POST form, etc.)를 메서드 파라미터로 바인딩한다. (?key=value)

@GetMapping("/search")
public List<User> search(@RequestParam("keyword") String keyword) {
    // /search?keyword=Spring -> keyword = "Spring"
}

// 여러 값 바인딩
@GetMapping("/search")
public String search(@RequestParam String name, @RequestParam int age) {
    // /search?name=Alice&age=20 -> name = "Alice", age = 20
}

// 필수 여부 및 기본값 지정
// @RequestParam(required=false, defaultValue="all") String type

✏️ 배열 형식의 파라미터 전달

  • 같은 파라미터 이름을 반복해서 전달:
GET /search?category=java&category=spring&category=boot
// 배열 형식 수신
@GetMapping("/search")
public String search(@RequestParam("category") String[] categories) {
    // categories: ["java", "spring", "boot"]
}

// List 수신
@GetMapping("/search")
public String search(@RequestParam List<String> category) {
    // category: [java, spring, boot]
}
  • 콤마로 구분된 문자열 전달:
GET /search?category=java,spring,boot
@GetMapping("/search")
public String search(@RequestParam("category") List<String> categories) {
    // category: ["java", "spring", "boot"]
}

Spring은 기본적으로 콤마로 구분된 값을 분리해서 리스트/배열로 반환한다.

@RequestBody

HTTP 요청 Body에 담긴 데이터를 Java 객체로 변환한다. 주로 POST, PUT, PATCH에서 사용한다.

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    // 요청 body의 JSON -> User 객체 자동 매핑
}

@ModelAttribute

HTTP 폼 데이터, 쿼리 파라미터 등을 Java 객체에 바인딩한다. 폼 기반 페이지에서 전달한 데이터 처리에 사용한다.

@PostMapping("/users/form")
public String register(@ModelAttribute UserForm userForm) {
    // 폼의 name, age 필드 -> UserForm 객체에 자동 바인딩
}

✏️ Form Data 처리

  • 개별 파라미터로 받기
@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String password){
    // 각각의 폼 필드를 개별로 받음
}
  • DTO (VO, Model) 객체로 한 번에 바인딩 (@ModelAttribute 사용)
public class UserForm {
    private String username;
    private String password;
    // getter, setter
}

@PostMapping("/register")
public String register(@ModelAttribute UserForm form) {
    // 폼의 name과 동일한 필드명으로 자동 매핑됨
}

✏️ DTO (Data Transfer Object)
데이터 전송을 위해 사용되는 객체로, 데이터를 담을 필드와 해당 필드에 접근할 수 있는 메서드를 정의한다. 반복적인 Getter, Setter, 생성자 코드를 Lombok 어노테이션으로 대체하여 코드를 매우 간결하게 유지한다.

@RequestHeader

인증, 토큰, User-Agent 등 HTTP 요청 헤더 값을 파라미터로 바인딩한다.

@GetMapping("/users/me")
public User getMe(@RequestHeader("Authorization") String token) {
    // Authorization: Bearer eyJhbGci... -> token 파라미터로 전달
}

@CookieValue

요청 쿠키 값을 파라미터로 바인딩한다.

@GetMapping("/visit")
public String visit(@CookieValue("visitTime") String visitTime) {
    // 쿠키에 저장된 visitTime 값 사용
}
profile
선형의 비선형적 기록 🐜

0개의 댓글