Spring에서는 클라이언트로부터 데이터를 받아 처리할 때 다양한 애너테이션을 제공한다.
@PathVariable은 요청 URL의 경로 값 일부를 변수로 받아올 때 사용된다.
주로 RESTful API에서 특정 자원을 조회하거나 수정할 때 활용된다.
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
return "사용자 조회: " + id;
}
URL 경로 변수와 메서드 매개변수 이름이 다를 경우 @PathVariable("경로변수명")을 명시할 수 있다.
@GetMapping("/products/{productId}")
public String getProduct(@PathVariable("productId") Long id) {
return "상품 ID: " + id;
}
@GetMapping("/categories/{categoryId}/products/{productId}")
public String getCategoryProduct(@PathVariable Long categoryId, @PathVariable Long productId) {
return "카테고리 ID: " + categoryId + ", 상품 ID: " + productId;
}
@RequestParam은 URL 쿼리 스트링에서 값을 가져올 때 사용된다.
예를 들어, 검색 기능이나 필터링에서 사용된다.
@GetMapping("/search")
public String search(@RequestParam String keyword) {
return "검색 키워드: " + keyword;
}
@GetMapping("/filter")
public String filter(@RequestParam(required = false, defaultValue = "all") String type) {
return "필터 타입: " + type;
}
@RequestBody는 HTTP 요청의 본문(body)에 포함된 데이터를 객체로 변환할 때 사용된다.
JSON 데이터를 받을 때 주로 활용되며, Jackson 라이브러리를 통해 자동 변환이 이루어진다.
@PostMapping("/users")
public String createUser(@RequestBody User user) {
return "사용자 생성: " + user.getName();
}
{
"id": 1,
"name": "홍길동",
"email": "hong@example.com"
}
@PostMapping("/products")
public String addProducts(@RequestBody List<Product> products) {
return "등록된 상품 개수: " + products.size();
}
[
{ "id": 1, "name": "노트북" },
{ "id": 2, "name": "모니터" }
]
Spring의 @Valid 또는 @Validated 애너테이션을 활용하면 입력 데이터를 검증할 수 있다.
@PostMapping("/register")
public ResponseEntity<String> registerUser(@Valid @RequestBody User user) {
return ResponseEntity.ok("회원 가입 성공");
}
@ModelAttribute는 폼 데이터를 객체로 바인딩할 때 사용된다.
주로 HTML 폼 전송(form submit) 시 활용되며, GET 요청과 POST 요청 모두 지원한다.
@PostMapping("/register")
public String register(@ModelAttribute User user) {
return "가입 완료: " + user.getName();
}
name=홍길동&email=hong@example.com
@ModelAttribute는 GET 요청에서 기본 값을 설정할 때도 사용된다.
@GetMapping("/form")
public String showForm(Model model) {
model.addAttribute("user", new User("홍길동", "hong@example.com"));
return "formPage";
}
| 애너테이션 | 역할 | 사용 예시 | 데이터 출처 |
|---|---|---|---|
| @PathVariable | URL 경로 변수 추출 | /users/{id} | URL 경로 (/{id}) |
| @RequestParam | 쿼리 파라미터 추출 | /search?keyword=Spring | URL 쿼리 (?key=value) |
| @RequestBody | 요청 본문을 객체로 변환 | JSON 데이터 | HTTP Body (POST, PUT) |
| @ModelAttribute | 폼 데이터를 객체로 변환 | name=홍길동&email=test@example.com | HTTP Body (폼 데이터) |