Spring

[Spring] Annotation @PathVariable, @RequestParam, @ModelAttribute, @RequestBody

codi-3 2024. 8. 13. 20:20

Spring Framework에서 @PathVariable, @RequestParam, @ModelAttribute, @RequestBody는 모두 HTTP 요청을 처리하는 메서드의 파라미터를 바인딩할 때 사용되는 어노테이션이다. 각각 의 어노테이션이 어떻게 사용되는지 보자.

 

🔡@PathVariable

  • 설명: URL 경로의 일부를 변수로 받아오는 데 사용된다.
  • 사용 예시: /users/{id}에서 {id} 부분을 파라미터로 받아올 수 있다.
  • 특징: URL의 특정 위치에 있는 값을 추출하여 메서드 파라미터에 바인딩한다.
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") String userId) {
    // userId는 URL 경로에서 가져온 값
    return "User ID: " + userId;
}

🔡@RequestParam

 

  • 설명: URL 쿼리 파라미터나 폼 데이터를 메서드 파라미터에 바인딩하는 데 사용된다.
  • 사용 예시:? name=John 같은 쿼리 파라미터를 파라미터로 받아올 수 있다.
  • 특징: 기본적으로 필수 파라미터이며, 필수 옵션을 해제하거나 기본값을 설정할 수 있다.
@GetMapping("/users")
public String getUserByName(@RequestParam("name") String name) {
    // name은 URL 쿼리에서 가져온 값
    return "User Name: " + name;
}

 

 


🔡@ModelAttribute

 

  • 설명: 모델 데이터를 생성하고, 이를 뷰에 전달하거나 폼 데이터와 함께 사용되는 객체를 바인딩하는 데 사용된다.
  • 사용 예시: 폼 데이터를 받아서 객체에 바인딩할 때 주로 사용된다.
  • 특징: 주로 폼 데이터를 처리하는 객체를 자동으로 생성하고 바인딩하는 역할을 하며, 뷰로 데이터를 전달할 때도 사용된다.
@PostMapping("/users")
public String createUser(@ModelAttribute User user) {
    // User 객체는 폼 데이터로부터 생성
    return "Created User: " + user.getName();
}

 


🔡 @RequestBody

 

  • 설명: HTTP 요청의 본문(body) 데이터를 메서드 파라미터로 바인딩하는 데 사용된다.
  • 사용 예시: JSON, XML 등의 데이터를 객체로 변환하여 받아올 수 있다.
  • 특징: 주로 JSON 또는 XML과 같은 구조화된 데이터를 받을 때 사용되며, 요청 본문 전체를 객체로 변한다.
@PostMapping("/users")
public String createUser(@RequestBody User user) {
    // User 객체는 요청 본문으로부터 생성
    return "Created User: " + user.getName();
}

 


✏️요약

  • @PathVariable: URL 경로에서 변수값을 추출한다.
  • @RequestParam: 쿼리 파라미터 또는 폼 데이터를 추출한다.
  • @ModelAttribute: 폼 데이터를 객체로 바인딩하거나 뷰에 데이터를 전달한다.
  • @RequestBody: HTTP 요청 본문을 객체로 바인딩한다.

처음 배우는 프레임워크라 아직 생소한 게 많지만 기초를 확실하게 다지고 연습을 하다 보면 익숙해질 거 같다. 앞으로 프로젝트에 많이 사용될 거 같으니 빠른 시일 내에 마스터해야겠다.

'Spring' 카테고리의 다른 글

[SpringBoot]Jpa Auth Filter  (0) 2024.08.26
[SpringBoot] Cookie & JWT  (0) 2024.08.21
[Spring Boot] JpaRepository  (0) 2024.08.20
[Springboot] IOC Container & Beans  (0) 2024.08.19
[SpringBoot] Constructor Annotation  (0) 2024.08.16