1. 개요
Spring 4.3. 일반적인 Spring MVC 프로젝트에서 @RequestMapping 을 부드럽게 처리하기 위해 매우 멋진 메소드 수준의 구성된 어노테이션을 도입 했습니다.
이 기사에서는 효율적인 방법으로 사용하는 방법을 배웁니다.
2. 새로운 어노테이션
일반적으로 기존 @RequestMapping 어노테이션을 사용하여 URL 처리기를 구현하려면 다음과 같을 것입니다.
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
새로운 접근 방식을 사용하면 다음과 같이 간단하게 단축 할 수 있습니다.
@GetMapping("/get/{id}")
Spring은 현재 GET, POST, PUT, DELETE 및 PATCH 와 같은 다양한 유형의 수신 HTTP 요청 메소드를 처리하기 위해 5 가지 유형의 내장 어노테이션을 지원합니다 . 이러한 어노테이션은 다음과 같습니다.
- @GetMapping
- 안녕하세요.
- 뿡 빵뀨
- @DeleteMapping
- @PatchMapping
명명 규칙에서 우리는 각 어노테이션이 각각의 수신 요청 메소드 유형을 처리하기위한 것임을 알 수 있습니다. 즉 , @GetMapping 은 요청 메소드의 GET 유형 을 처리하는 데 사용되고 @PostMapping 은 요청 메소드의 POST 유형 을 처리하는 데 사용됩니다 .
3. 작동 원리
위의 모든 어노테이션은 이미 내부적으로 @RequestMapping 및 method 요소 의 해당 값으로 어노테이션 처리되어 있습니다.
예를 들어 @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
'Java' 카테고리의 다른 글
Spring Handler 매핑 사용방법(예제) (0) | 2021.04.20 |
---|---|
Spring MVC 콘텐츠 협상 (0) | 2021.04.19 |
Spring MVC 사용자 지정 유효성 검사 (0) | 2021.04.19 |
Spring @ResponseStatus를 사용하여 HTTP 상태 코드 설정 (0) | 2021.04.19 |
Spring MVC와 @ModelAttribute 어노테이션 (0) | 2021.04.19 |