그날그날메모

Spring @RequestMapping 새로운 바로 가기 어노테이션

Java

Spring @RequestMapping 새로운 바로 가기 어노테이션

그날그날메모 2021. 4. 19. 19:20

1. 개요

Spring 4.3. 일반적인 Spring MVC 프로젝트에서 @RequestMapping 을 부드럽게 처리하기 위해 매우 멋진 메소드 수준의 구성된 어노테이션을 도입 했습니다.

이 기사에서는 효율적인 방법으로 사용하는 방법을 배웁니다.

2. 새로운 어노테이션

일반적으로 기존 @RequestMapping 어노테이션을 사용하여 URL 처리기를 구현하려면 다음과 같을 것입니다.

@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)

새로운 접근 방식을 사용하면 다음과 같이 간단하게 단축 할 수 있습니다.

@GetMapping("/get/{id}")

Spring은 현재 GET, POST, PUT, DELETEPATCH 와 같은 다양한 유형의 수신 HTTP 요청 메소드를 처리하기 위해 5 가지 유형의 내장 어노테이션을 지원합니다 . 이러한 어노테이션은 다음과 같습니다.

  • @GetMapping
  • 안녕하세요.
  • 뿡 빵뀨
  • @DeleteMapping
  • @PatchMapping

명명 규칙에서 우리는 각 어노테이션이 각각의 수신 요청 메소드 유형을 처리하기위한 것임을 알 수 있습니다. 즉 , @GetMapping요청 메소드의 GET 유형 을 처리하는 데 사용되고 @PostMapping요청 메소드의 POST 유형 을 처리하는 데 사용됩니다 .

3. 작동 원리

위의 모든 어노테이션은 이미 내부적으로 @RequestMappingmethod 요소 의 해당 값으로 어노테이션 처리되어 있습니다.

예를 들어 @GetMapping 어노테이션 의 소스 코드를 살펴보면 다음과 같은 방법으로 RequestMethod.GET 어노테이션이 이미 추가되었음을 알 수 있습니다 .

@Target({ java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = { RequestMethod.GET })
public @interface GetMapping {
    // abstract codes
}

다른 모든 어노테이션이 같은 방법으로 생성, 즉 @PostMapping가 어노테이션을 붙일 수 RequestMethod.POST , @PutMapping은 과 어노테이션이 RequestMethod.PUT,

어노테이션의 전체 소스 코드는 여기에서 확인할 수 있습니다 .

4. 구현

이러한 어노테이션을 사용하여 빠른 REST 애플리케이션을 구축해 보겠습니다.

Maven을 사용하여 프로젝트를 빌드하고 Spring MVC를 사용하여 애플리케이션을 만들 것이기 ​​때문에 pom.xml에 필요한 의존성을 추가해야합니다 .

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

spring-webmvc 의 최신 버전은 Central Maven Repository 에서 사용할 수 있습니다 .

이제 들어오는 요청 URL을 매핑하는 컨트롤러를 만들어야합니다. 이 컨트롤러 내에서이 모든 어노테이션을 하나씩 사용합니다.

4.1. @GetMapping

@GetMapping("/get")
public @ResponseBody ResponseEntity<String> get() {
    return new ResponseEntity<String>("GET Response", HttpStatus.OK);
}
@GetMapping("/get/{id}")
public @ResponseBody ResponseEntity<String>
  getById(@PathVariable String id) {
    return new ResponseEntity<String>("GET Response : " 
      + id, HttpStatus.OK);
}

4.2. 안녕하세요.

@PostMapping("/post")
public @ResponseBody ResponseEntity<String> post() {
    return new ResponseEntity<String>("POST Response", HttpStatus.OK);
}

4.3. 뿡 빵뀨

@PutMapping("/put")
public @ResponseBody ResponseEntity<String> put() {
    return new ResponseEntity<String>("PUT Response", HttpStatus.OK);
}

4.4. @DeleteMapping

@DeleteMapping("/delete")
public @ResponseBody ResponseEntity<String> delete() {
    return new ResponseEntity<String>("DELETE Response", HttpStatus.OK);
}

4.5. @PatchMapping

@PatchMapping("/patch")
public @ResponseBody ResponseEntity<String> patch() {
    return new ResponseEntity<String>("PATCH Response", HttpStatus.OK);
}

참고 사항 :

  • URI로 적절한 수신 HTTP 메서드를 처리하기 위해 필요한 어노테이션을 사용했습니다 . 예를 들어, @GetMapping 핸들, URI를 "/ GET" @PostMapping 등등 "/ 포스트"URI 및 핸들
  • REST 기반 애플리케이션을 만들고 있으므로 애플리케이션을 단순화하기 위해 200 개의 응답 코드가있는 상수 문자열 (각 요청 유형에 고유 한)을 반환합니다. 이 경우 Spring의 @ResponseBody 어노테이션을 사용했습니다.
  • URL 경로 변수를 처리해야한다면 @RequestMapping 을 사용하는 경우에 사용하던 방식보다 훨씬 간단하게 처리 할 수 ​​있습니다 .

5. 응용 프로그램 테스트

애플리케이션을 테스트하려면 JUnit을 사용하여 몇 가지 테스트 케이스를 만들어야합니다. SpringJUnit4ClassRunner사용 하여 테스트 클래스를 시작합니다. 각 어노테이션과 컨트롤러에서 선언 한 모든 핸들러를 테스트하기 위해 5 개의 다른 테스트 케이스를 생성합니다.

@GetMapping 의 예제 테스트 케이스를 간단히 살펴 보겠습니다 .

@Test 
public void giventUrl_whenGetRequest_thenFindGetResponse() 
  throws Exception {

    MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
      .get("/get");

    ResultMatcher contentMatcher = MockMvcResultMatchers.content()
      .string("GET Response");

    this.mockMvc.perform(builder).andExpect(contentMatcher)
      .andExpect(MockMvcResultMatchers.status().isOk());

}

보시다시피 GET URL "/ get"을 누르면 상수 문자열 " GET Response " 가 예상 됩니다.

이제 @PostMapping 을 테스트하는 테스트 케이스를 만들어 보겠습니다 .

@Test 
public void givenUrl_whenPostRequest_thenFindPostResponse() 
  throws Exception {
    
    MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
      .post("/post");
	
    ResultMatcher contentMatcher = MockMvcResultMatchers.content()
      .string("POST Response");
	
    this.mockMvc.perform(builder).andExpect(contentMatcher)
      .andExpect(MockMvcResultMatchers.status().isOk());
	
}

같은 방식으로 모든 HTTP 메서드를 테스트하기 위해 나머지 테스트 케이스를 만들었습니다.

또는 PostMan, RESTClient 등과 같은 일반적인 REST 클라이언트를 사용하여 애플리케이션을 테스트 할 수 있습니다. 이 경우 나머지 클라이언트를 사용하는 동안 올바른 HTTP 메서드 유형을 선택하는 데 약간의주의가 필요합니다. 그렇지 않으면 405 오류 상태가 발생합니다.

6. 결론

이 기사에서는 전통적인 Spring MVC 프레임 워크를 사용하는 빠른 웹 개발을위한 다양한 유형의 @RequestMapping 단축키에 대해 간단히 소개했습니다 . 이러한 빠른 바로 가기를 사용하여 깨끗한 코드 기반을 만들 수 있습니다.

언제나처럼 Github 프로젝트 에서이 예제의 소스 코드를 찾을 수 있습니다 .

참고
  • https://docs.spring.io/spring-framework/docs/current/reference/html
  • https://www.baeldung.com/spring-new-requestmapping-shortcuts