[Java Spring] 요청 데이터 처리 애너테이션

khj·2025년 3월 31일

Java

목록 보기
4/11
post-thumbnail

Spring에서는 클라이언트로부터 데이터를 받아 처리할 때 다양한 애너테이션을 제공한다.

1. @PathVariable - URL 경로에서 값 추출

@PathVariable은 요청 URL의 경로 값 일부를 변수로 받아올 때 사용된다.
주로 RESTful API에서 특정 자원을 조회하거나 수정할 때 활용된다.

(1) 기본 사용법

@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
    return "사용자 조회: " + id;
}
  • GET /users/123 요청이 오면 id=123으로 매핑된다.

(2) 변수 이름 지정

URL 경로 변수와 메서드 매개변수 이름이 다를 경우 @PathVariable("경로변수명")을 명시할 수 있다.

@GetMapping("/products/{productId}")
public String getProduct(@PathVariable("productId") Long id) {
    return "상품 ID: " + id;
}
  • GET /products/234 요청이 오면 id=234로 매핑된다.

(3) 다중 PathVariable 사용

@GetMapping("/categories/{categoryId}/products/{productId}")
public String getCategoryProduct(@PathVariable Long categoryId, @PathVariable Long productId) {
    return "카테고리 ID: " + categoryId + ", 상품 ID: " + productId;
}
  • GET /categories/1/products/5 요청이 오면 categoryId=1, productId=5로 매핑된다.

2. @RequestParam - 쿼리 파라미터 값 추출

@RequestParam은 URL 쿼리 스트링에서 값을 가져올 때 사용된다.
예를 들어, 검색 기능이나 필터링에서 사용된다.

(1) 기본 사용법

@GetMapping("/search")
public String search(@RequestParam String keyword) {
    return "검색 키워드: " + keyword;
}
  • GET /search?keyword=Spring 요청 시 "검색 키워드: Spring" 응답을 반환한다.

(2) 기본값 설정 & 필수 여부 지정

  • required = false → 값이 없어도 허용
  • defaultValue → 기본값 설정
@GetMapping("/filter")
public String filter(@RequestParam(required = false, defaultValue = "all") String type) {
    return "필터 타입: " + type;
}
  • GET /filter 요청 시 "필터 타입: all" 응답을 반환한다.
  • GET /filter?type=new 요청 시 "필터 타입: new" 응답을 반환한다.

3. @RequestBody - 요청 본문 데이터를 객체로 변환

@RequestBody는 HTTP 요청의 본문(body)에 포함된 데이터를 객체로 변환할 때 사용된다.
JSON 데이터를 받을 때 주로 활용되며, Jackson 라이브러리를 통해 자동 변환이 이루어진다.

(1) JSON 데이터 받기

@PostMapping("/users")
public String createUser(@RequestBody User user) {
    return "사용자 생성: " + user.getName();
}
  • JSON 요청 예시
{
  "id": 1,
  "name": "홍길동",
  "email": "hong@example.com"
}
  • User 객체로 변환되어 컨트롤러에서 사용할 수 있다.

(2) List 형식의 JSON 데이터 받기

@PostMapping("/products")
public String addProducts(@RequestBody List<Product> products) {
    return "등록된 상품 개수: " + products.size();
}
  • JSON 요청 예시
[
  { "id": 1, "name": "노트북" },
  { "id": 2, "name": "모니터" }
]

(3) @RequestBody와 @Valid 활용 (유효성 검사)

Spring의 @Valid 또는 @Validated 애너테이션을 활용하면 입력 데이터를 검증할 수 있다.

@PostMapping("/register")
public ResponseEntity<String> registerUser(@Valid @RequestBody User user) {
    return ResponseEntity.ok("회원 가입 성공");
}
  • User 클래스에서 @NotBlank, @Size 등의 검증 애너테이션을 설정하면, 자동으로 입력값을 체크해준다.

4. @ModelAttribute - 폼 데이터 자동 바인딩

@ModelAttribute는 폼 데이터를 객체로 바인딩할 때 사용된다.
주로 HTML 폼 전송(form submit) 시 활용되며, GET 요청과 POST 요청 모두 지원한다.

(1) 기본 사용법

@PostMapping("/register")
public String register(@ModelAttribute User user) {
    return "가입 완료: " + user.getName();
}
  • 폼 데이터 예시 (application/x-www-form-urlencoded)
name=홍길동&email=hong@example.com
  • User 객체에 자동 매핑된다.

(2) 초기 데이터 설정

@ModelAttribute는 GET 요청에서 기본 값을 설정할 때도 사용된다.

@GetMapping("/form")
public String showForm(Model model) {
    model.addAttribute("user", new User("홍길동", "hong@example.com"));
    return "formPage";
}
  • 처음 폼 페이지가 로드될 때, User 객체가 기본값과 함께 전달된다.

5. 주요 애너테이션 비교

애너테이션 역할 사용 예시 데이터 출처
@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 (폼 데이터)
profile
Spring, Django 개발 블로그

0개의 댓글