이번에는 Spring을 이용한 여러가지 매핑 방법에 대해 알아보려고한다.
기본적으로 지금까지 사용했던 RequestMapping 이외에 몇번 사용해봤던 Get, PostMapping 그리고 활용법까지 살펴보자.
@RequestMapping
- 가장 기본적으로 사용되는 요청에 대한 매핑법이다.
@RequestMapping("/hello-basic")
public String helloBasic(){
log.info("helloBasic");
return "ok";
}
@RequestMapping(value = "/mapping-get-v1", method = RequestMethod.GET)
public String mappingGetV1() {
log.info("mappingGetV1");
return "ok";
}
- 기본적으로 @RequestMapping("**요청을 처리할 URL**”)을 넣어서 요청을 처리할 수 있다.
- 또한, method 속성을 이용하여 특정 메서드를 통한 요청일 때만 처리하게끔 설정할 수도 있다.
@[Method]Mapping
- 메서드이름과 함께 특정 메서드를 통한 요청일 때만 처리하게끔 할 수 있다.
- @RequestMapping의 method 속성을 이용하는 것과 같은 역할을 한다.
- @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
@GetMapping(value = "/mapping-get-v2")
public String mappingGetV2() {
log.info("mapping-get-v2");
return "ok";
}
@PathVariable
- 경로변수, 리소스 경로에 식별자를 넣어서 처리할 수 있다.
- @PathVariable() 에 파라미터 이름을 지정하여 메소드의 파라미터와 매핑할 수 있다.
- 파라미터 이름을 갖게 설정하면 이름 지정을 생략할 수 있다.
- 다중으로도 사용가능하고, 실제로 실무에서 자주 사용되니까 잘 기억해두자.
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data){
log.info("mappingPath userId={}", data);
return "ok";
}
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) {
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "ok";
}
헤더, 파라미터를 조건으로 추가
- Mapping 어노테이션에 속성을 추가하여 특정 헤더, 파라미터를 조건으로 요청을 처리하게 할 수 있다.
- params
- 특정 파라미터를 추가하여 해당 파라미터가 넘어온 경우에만 요청 URL을 처리한다.
@GetMapping(value = "/mapping-param", params = "mode=debug") public String mappingParam() { log.info("mappingParam"); return "ok"; }
- headers
- 특정 헤더를 추가하여 해당 헤더가 넘어온 경우에만 요청 URL을 처리한다.
@GetMapping(value = "/mapping-header", headers = "mode=debug") public String mappingHeader() { log.info("mappingHeader"); return "ok"; }
- consumes
- Content-Type을 지정하여 지정한 Content-Type으로 넘어온 경우에만 요청 URL을 처리한다.
- *\\/*, application/* 와 같이 설정가능
@PostMapping(value = "/mapping-consume", consumes = "application/json") public String mappingConsumes() { log.info("mappingConsumes"); return "ok"; }
- accept
- Media 타입을 지정하여 지정한 Media 타입으로 넘어온 경우에만 요청 URL을 처리한다.
- *\\/*, text\\* 와 같이 설정가능
@PostMapping(value = "/mapping-produce", produces = "text/html") public String mappingProduces() { log.info("mappingProduces"); return "ok"; }
위 내용들을 이용하여 간단하게 API를 설계해보자.
- @RequestMapping(”/users”) 클래스에 RequestMapping을 통해 겹치는 부분을 제거해준다.
- 회원 목록 조회: GET /users
- @GetMapping(”/users”) ⇒ @GetMapping
- 회원 등록: POST /users
- @PostMapping(”/users”) ⇒ @PostMapping
- 회원 조회: GET /users/{userId}
- @GetMapping(”/users/{userId}”) ⇒ @GetMapping(”/{userId}”)
- 회원 수정: PATCH /users/{userId}
- @PatchMapping(”/users/{userId}”) ⇒ @PatchMapping(”/{userId}”)
- 회원 삭제: DELETE /users/{userId}
- @DeleteMapping(”/users/{userId}”) ⇒ @DeleteMapping(”/{userId}”)
위와 같이 메서드에 따라 나누어서 경로변수를 받아서 요청 URL을 처리할 수 있다.
참고 -
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'Spring' 카테고리의 다른 글
[Spring] HTTP 메시지 컨버터 (0) | 2022.05.23 |
---|---|
[SpringMVC] HTTP 요청, 응답처리 (0) | 2022.05.23 |
[SpringMVC] 로깅 (Logging) (0) | 2022.05.23 |
[Spring MVC] Spring MVC 패턴 (0) | 2022.05.11 |
[Spring MVC] HTML, HTTP API, CSR, SSR (0) | 2022.05.11 |