Spring의 @RequestMapping 어노테이션은 HTTP 요청과 매핑되는 메서드 또는 컨트롤러 클래스를 지정하는 데 사용된다.
@RequestMapping 어노테이션을 메서드 위에 선언하는 경우, 해당 메서드가 처리하는 요청 경로를 지정할 수 있다.
예를 들어, @RequestMapping("/hello")와 같이 지정하면 "/hello" 경로의 HTTP 요청을 처리하는 메서드가 된다.
반면에 @RequestMapping 어노테이션을 클래스 위에 선언하는 경우, 해당 클래스에 정의된 모든 메서드에 공통으로 적용되는 요청 경로를 지정할 수 있다. 즉, 클래스 수준에서 지정한 URL 경로에 대한 요청이 해당 컨트롤러 클래스의 모든 메서드에서 처리된다는 것을 의미한다.
또한 클래스 수준에서 @RequestMapping 어노테이션을 사용하면 해당 클래스에 대한 기본 URL을 지정할 수도 있다.
예를 들어, @RequestMapping("/users")와 같이 지정하면 "/users" 경로에 대한 요청이 해당 컨트롤러 클래스의 모든 메서드에서 처리되고, 클래스 수준에서 지정한 URL 앞에 메서드에서 지정한 URL이 추가된다.
따라서 @RequestMapping 어노테이션을 클래스 수준과 메서드 수준에서 모두 사용할 수 있지만, 클래스 수준에서 사용하는 것은 메서드에 대한 공통된 요청 경로를 지정하거나 클래스에 대한 기본 URL을 설정하기 위해 사용된다.
그렇다면 @RequestMapping 어노테이션을 클래스 위에 선언하면, 하위 메서드에 @RequestMapping은 어떤식으로 정의해서 사용해야 할까?
@RequestMapping 어노테이션을 클래스 수준에 선언하면 해당 클래스 내의 모든 메서드에 대한 URL 매핑이 공통으로 적용된다. 하위 메서드에서 추가로 URL 매핑을 지정하려면, 클래스 수준에서 지정한 URL 매핑을 기반으로 추가 경로를 지정하면 된다.
예를 들어, 다음과 같이 @RequestMapping 어노테이션을 클래스 수준에 선언하면:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/list")
public String listUsers() {
// ...
}
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
// ...
}
// ...
}
위의 예제를 보면, @RequestMapping("/users") 어노테이션이 UserController 클래스에 선언되어 있다.
이 클래스의 모든 메서드에 대한 URL 매핑이 "/users"로 시작되는것을 의미한다.
이제 listUsers()와 getUser() 메서드에서는 @GetMapping 어노테이션을 사용하여 추가적인 URL 경로를 지정할 수 있게된다.
listUsers() 메서드의 URL 경로는 "/users/list"이고, getUser() 메서드는 "/users/{id}"와 같이 동적 경로 변수를 포함한다. 이렇게 하면 "/users/1"과 같은 요청이 getUser() 메서드로 라우팅되는 것이다.
즉, 클래스 수준에서 @RequestMapping 어노테이션을 사용하여 기본 URL 경로를 정의하고, 하위 메서드에서 추가적인 경로를 지정할 수 있다.
그럼 @GetMapping 어노테이션 말고 다른 어노테이션으로 대체할수 있을까?
@GetMapping 어노테이션은 HTTP GET 요청에 대한 핸들러 메서드를 매핑하는 데 사용되는 특별한 @RequestMapping 어노테이션이다.
@GetMapping 어노테이션 대신에 다른 HTTP 요청에 대한 핸들러 메서드를 매핑하기 위해서는 다음과 같은 어노테이션을 사용할 수 있다.
@PostMapping: HTTP POST 요청에 대한 핸들러 메서드 매핑
@PutMapping: HTTP PUT 요청에 대한 핸들러 메서드 매핑
@DeleteMapping: HTTP DELETE 요청에 대한 핸들러 메서드 매핑
@PatchMapping: HTTP PATCH 요청에 대한 핸들러 메서드 매핑
예를 들어, @PostMapping 어노테이션을 사용하여 새로운 사용자를 추가하는 핸들러 메서드를 정의할 수 있다.
다음은 UserController 클래스의 addUser() 메서드를 @PostMapping 어노테이션을 사용하여 수정한 예제다.
@Controller
@RequestMapping("/users")
public class UserController {
// ...
@PostMapping("/add")
public String addUser(@ModelAttribute User user) {
// 새로운 사용자를 추가하는 로직
return "redirect:/users/list"; // 사용자 목록 페이지로 리다이렉트
}
// ...
}
위의 예제는, @PostMapping("/add") 어노테이션을 사용하여 "/users/add" 경로의 HTTP POST 요청에 대한 핸들러 메서드를 정의하고있다. @ModelAttribute 어노테이션은 요청 본문에서 사용자 정보를 바인딩하는 데 사용될수 있다.
다른 HTTP 요청 메서드에 대해서도 @RequestMapping 어노테이션 대신 각각의 요청 메서드에 맞는 어노테이션을 사용하여 핸들러 메서드를 정의할 수 있다.
'Spring' 카테고리의 다른 글
Spring Annotation 14. @Resource (0) | 2023.04.20 |
---|---|
Spring Annotation 13. @Bean (0) | 2023.04.19 |
Spring Annotation 12. @Configuration (0) | 2023.04.19 |
Spring Annotation 11. @Repository (0) | 2023.04.19 |
Spring Annotation 10. @Service (0) | 2023.04.19 |
댓글