클라이언트에서 요청이 들어올 때, 특정 url을 인식하고, 메소드를 실행시켜주는 것을 매핑이라고 한다.
보통
@RequestMapping("/url")
public String Basic(){
log.info("Basic");
return "viewname";
}
위와 같은 형태의 코드로 이루어져 있다.
-localhost:8080/url 시 Basic 메소드 실행 후(log 출력) viewname이라는 html 파일이나 뷰를 보여준다.
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/hello-basic")
public String helloBasic(){
log.info("helloBasic");
return "ok";
}
}
위의 코드를 살펴보자.
@RestController 어노테이션이 적혀있고, return에는 view가 아닌 String "ok"가 적혀있다.
이 어노테이션은 view가 아닌 String을 그대로 response 해주게 한다.
이 어노테이션을 이용해 여러가지의 매핑 방법을 알아보겠다.
1. @RequestMapping, @GetMapping(PostMapping, PutMapping,.....,....) + method = RequestMethod.GET
@RequestMapping(value = "/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";
}
@GetMapping(value = "/mapping-get-v2")
public String mappingGetV2() {
log.info("mappingGetV2");
return "ok";
}
위에는 3가지의 GetMapping이 있다.
첫번째
@RequestMapping 어노테이션이다. 기본적으로 Get 방식의 매핑이다. 즉, Get 방식으로 요청을 해야한다.(쿼리)
두번째
어노테이션에 method = RequestMethod.GET이 추가되었다. 첫번째와 같다.
세번째
위의 두 개의 것을 @GetMapping으로도 쓸 수 있다.
-이렇게 GetMapping 3가지 방법을 알아보았다.
-post, delete 등의 방식으로 요청하고 싶다면,
@RequestMapping(value = "/mapping-get-v1", method = RequestMethod.DELETE)
@PostMapping(value = "/mapping-get-v2")
-위처럼 써주면 된다.
2. @PathVariable
이 어노테이션은 경로변수를 받아오는 기능을 한다.
바로 코드를 살펴보자.
@GetMapping(value = "/mapping/{userId}") //경로변수
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId={}", data);
return "ok";
}
@GetMapping(value = "/mapping/{userId}") 를 살펴보면 중괄호 {}사이에 변수명이 들어있는 것을 알 수 있다.
1. 요청 시 localhost:8080/mapping/jeongjiho 라는 url이 요청되면
2. localhost:8080/mapping/userId -> userId = "jeongjiho"가 된다.
3. @PathVariable("userId") String data 에 data에 userId를 담아준다.
*@PathVariable은 경로변수에 들어있는 데이터를 가져온다.
+@PathVariable String userId 로 바로 변수명을 맞춰줘서 쓸 수도 있는데, 꼭 경로변수와 파라미터 변수명이 같아야한다.
@GetMapping(value = "/mapping/{userId}") //경로변수
public String mappingPath(@PathVariable String userId) { //경로 변수와 파라미터의 변수명이 같아야한다.
log.info("mappingPath userId={}", userId);
return "ok";
}
3. @PathVariable로 여러개의 경로 변수 값 받기
@GetMapping(value = "/mapping/users/{userId}/orders/{orderId}") //경로변수
public String mappingPath(@PathVariable String userId, @PathVariable Long orderId) {
log.info("mappingPath userId={}", userId, orderId);
return "ok";
}
위와 비슷하다. 똑같이 @PathVariable로 경로변수를 파라미터로 받아온다.
============================================================================================
위의 요청 매핑들을 이용한 설계 예시
- 목적 방식 URL
1. 회원 목록 조회 : GET /users
2. 회원 등록 : POST /users
3. 회원 조회 : GET /users/{userId}
4. 회원 수정 : PATCH /users/{userId}
5. 회원 삭제 : DELETE /users/{userId}
-회원을 다룬다는 점에서 /users는 공통으로 들어가있다.
-나머지는 api를 통해 구분해두었다.
-RESTful API의 원칙에 따라 설계되었다.
-회원은 리소스, HTTP메소드는 작업. 즉, 리소스(회원)을 갖고 어떠한 작업(HTTP 메소드)을 하겠다라는 것.
-후에 RESTful API를 공부해볼 것.
아래는 설계에 대한 코드이다.(데이터를 다루는 부분은 아직 넣어주지 않았다.)
package hello.springmvc.basic.requestmapping;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/mapping/users")
public class MappingClassController {
/*
회원 목록 조회: GET /users
회원 등록: POST /users
회원 조회: GET /users/{userId}
회원 수정: PATCH /users/{userId}
회원 삭제: DELETE /users/{userId}
*/
@GetMapping
public String user(){
return "get users";
}
@PostMapping
public String addUser(){
return "post user";
}
@GetMapping("/{userId}")
public String findUser(@PathVariable String userId){
return "get userId=" + userId;
}
@PatchMapping("/{userId}")
public String updateUser(@PathVariable String userId){
return "update userId=" + userId;
}
@DeleteMapping("/{userId}")
public String deleteUser(@PathVariable String userId){
return "delete userId=" + userId;
}
}
1. @RequestMapping("/mapping/users")
-localhost:8080/mapping/users의 하위 경로를 매핑해주었다. users라는 리소스를 다룰 것이라는 것을 알 수 있다.
2. users()
-@GetMapping을 통해 get방식으로 users를 다룰 것이다.
-users를 get방식으로 다루는 것은 회원 목록 조회이다.
3. addUser()
-@PostMapping을 통해 post방식으로 users를 다룰 것이다.
-회원 등록이다.
4. findUser()
-@GetMapping을 통해 get방식으로 users인 경로변수 userId로 들어온 값을 다룰 것이다.
-회원을 조회한다.
5. updateUser()
-@PatchMapping을 통해 patch방식으로 users인 경로변수 userId로 들어온 값을 다룰 것이다.
-회원의 업데이트(수정)이다.
6. deleteUser()
-@DeleteMapping을 통해 delete 방식으로 users인 경로변수 userId로 들어온 값을 다룰 것이다.
-회원의 삭제이다.
**위의 것만 보면 데이터들을 어떻게 넣고 빼는지 알 수 없기 때문에 햇갈릴 수 있다. 후에 데이터들을 스프링 mvc로 어떻게 조회하고 다루는 지를 공부하고 다시 돌아와 한번 더 보자.
<본 글은 김영한님의 강의를 듣고 작성되었습니다.>
'스프링 프레임 워크' 카테고리의 다른 글
스프링 mvc의 전체적인 동작 과정(argument resolver, returnvalue handler) (0) | 2023.10.10 |
---|---|
HTTP 응답 다루기(HTML-정적, 동적) (0) | 2023.10.09 |
HTTP 요청 메시지(데이터를 다루기) (0) | 2023.10.05 |
HTTP 요청 파라미터(데이터를 다루기) (0) | 2023.09.27 |
로깅 (1) | 2023.09.18 |