@RequestMapping과 @GetMapping, @PostMapping의 차이

clock icon

posted 3 weeks ago

@RequestMapping

정의: @RequestMapping 어노테이션은 Spring Framework의 초기 버전에서 제공된 기능으로, HTTP 요청을 특정 핸들러 메소드에 매핑하는 데 사용됩니다. 이 어노테이션은 다양한 HTTP 메소드를 처리할 수 있는 속성을 제공합니다.

 

@RequestMapping(value = "/example", method = RequestMethod.GET)
public String exampleGet() {
    return "example";
}
@RequestMapping(value = "/example", method = RequestMethod.POST)
public String examplePost() {
    return "example";
}

 

위 코드에서 @RequestMapping은 GET과 POST 요청을 각각 다른 메소드에 매핑하고 있습니다.

 

@GetMapping, @PostMapping 등

Spring 4.3 버전 이후, @RequestMapping의 특화된 버전인 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 등이 도입되었습니다. 이러한 어노테이션들은 특정 HTTP 메소드에 대해 더 명확하고 간편하게 사용할 수 있습니다.

 

@GetMapping("/example")
public String exampleGet() {
    return "example";
}
@PostMapping("/example")
public String examplePost() {
    return "example";
}

 

더 효과적인 것은?

명확성과 가독성: @GetMapping, @PostMapping 등의 어노테이션은 해당 핸들러 메소드가 처리하는 HTTP 메소드를 명확하게 표현합니다. 이는 코드의 가독성을 높이고, 다른 개발자들이 코드를 쉽게 이해할 수 있게 합니다.

간결성: 이 어노테이션들은 @RequestMapping에 비해 더 간결합니다. 예를 들어, 특정 메소드에 대해 @RequestMapping(method = RequestMethod.GET) 대신 @GetMapping을 사용하는 것이 더 직관적이고 코드도 짧아집니다.

기능적 차이: 기능적으로는 @RequestMapping@GetMapping, @PostMapping 등이 동일합니다. 즉, 어떤 HTTP 메소드를 처리할지 지정하는 방법만 다를 뿐, 실제로 수행하는 작업에는 차이가 없습니다.

코드 개선 예시

기존 코드를 개선하여 더 간결하고 명확하게 만들 수 있습니다. 예를 들어, selectBoard1List 메소드가 GET 요청을 처리한다면 @GetMapping을 사용하는 것이 좋습니다. 반면, POST 요청을 처리한다면 @PostMapping을 사용하는 것이 적합합니다.

 

기존 코드 (Legacy)

@RequestMapping(value = "/board", method = RequestMethod.POST)
public String selectBoard1List(@RequestBody Board board) {
    // logic here
    return "boardList";
}

 

개선된 코드 (To-Be)

@PostMapping("/board")
public String selectBoard1List(@RequestBody Board board) {
    // logic here
    return "boardList";
}

 

@PostMapping을 사용하여 더 간결하고 명확하게 변경되었습니다.

 

공식 문서

Annotation for mapping web requests onto methods in request-handling classes with flexible method signatures.

Both Spring MVC and Spring WebFlux support this annotation through a RequestMappingHandlerMapping and RequestMappingHandlerAdapter in their respective modules and package structures. For the exact list of supported handler method arguments and return types in each, please use the reference documentation links below:

  • Spring MVC Method Arguments and Return Values

  • Spring WebFlux Method Arguments and Return Values

NOTE: This annotation can be used both at the class and at the method level. In most cases, at the method level applications will prefer to use one of the HTTP method specific variants @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, or @PatchMapping.

NOTE: This annotation cannot be used in conjunction with other @RequestMapping annotations that are declared on the same element (class, interface, or method). If multiple @RequestMapping annotations are detected on the same element, a warning will be logged, and only the first mapping will be used. This also applies to composed @RequestMapping annotations such as @GetMapping, @PostMapping, etc.

Top Questions