@RestControllerRESTful 웹 서비스를 만들 때 사용하는 핵심 어노테이션. 클래스 내의 모든 메서드가 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.)를 컨트롤러 메서드의 매개 변수에 손쉽게 연결해주는 역할을 한다.
@PathVariableURL 경로의 값을 메서드 파라미터로 바인딩한다.
@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은 기본적으로 콤마로 구분된 값을 분리해서 리스트/배열로 반환한다.
@RequestBodyHTTP 요청 Body에 담긴 데이터를 Java 객체로 변환한다. 주로 POST, PUT, PATCH에서 사용한다.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 요청 body의 JSON -> User 객체 자동 매핑
}
@ModelAttributeHTTP 폼 데이터, 쿼리 파라미터 등을 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 값 사용
}