[Spring] 스프링 MVC(Spring MVC) 요청 매핑
Updated:
1. 개요
스프링 MVC는 다양한 요청 매핑을 지원한다. 이번에는 스프링 MVC 요청 매핑에 대해 알아보도록 하자.
2. RequestMapping
@RequestMapping을 사용하면 지정된 URL과 일치하는 요청 발생 시, 해당 메서드가 실행된다.
1
2
3
4
5
@RequestMapping(value = "/hello-basic")
public String helloBasic() {
log.info("helloBasic");
return "ok";
}
2-1. HTTP Method 지정
@RequestMapping을 사용하면 GET, HEAD, POST, PUT, PATCH, DELETE 요청 시 호출이 되는데, method 속성을 이용하면 원하는 HTTP Method만 지정 가능하다.
1
2
3
4
5
@RequestMapping(value = "/hello-basic", method = RequestMethod.GET)
public String helloBasic() {
log.info("helloBasic");
return "ok";
}
2-2. HTTP Method 매핑 축약
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping을 사용하면 @RequestMapping에 method 속성을 적용한 것과 동일하게 사용할 수 있다.
1
2
3
4
5
@GetMapping("/hello-basic")
public String helloBasic() {
log.info(“helloBasic”);
return “ok”;
}
3. HTTP 요청 파라미터
스프링 MVC는 @PathVariable, @RequestParam, @ModelAttribute를 통해 다양한 요청 파라미터를 처리할 수 있다.
3-1. @PathVariable
@PathVariable을 사용하여 리소스 경로의 식별자와 매칭되는 파라미터를 조회할 수 있다. 변수 이름과 파라미터 이름이 같은 경우 @PathVariable의 속성은 생략 가능하다.
1
2
3
4
5
@GetMapping(“/mapping/{userId}”)
public String mappingPath(@PathVariable(“userId”) String userId) {
log.info(“mappingPath userId={}”, userId);
return “ok”;
}
3-2. @RequestParam
URL의 쿼리 파라미터에 요청 데이터를 포함해서 전달하거나, HTML Form을 통해 데이터를 전달할 때 @RequestParam을 사용한다. 변수 이름과 파라미터 이름이 같은 경우 @RequestParam의 속성은 생략 가능하다.
1
2
3
4
5
6
@ResponseBody
@RequestMapping("/request-param")
public String requestParam(@RequestParam("username") String username, @RequestParam("age") int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
3-3. @ModelAttribute
URL의 쿼리 파라미터에 요청 데이터를 포함해서 전달하거나, HTML Form을 통해 데이터를 전달할 때 @ModelAttribute을 사용한다. 전달받은 데이터를 자동으로 객체에 매핑시켜 준다는 점이 @RequestParam과 다르다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@ResponseBody
@RequestMapping("/model-attribute")
public String modelAttribute(@ModelAttribute HelloData helloData) {
log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
return "ok";
}
@Data
public static class HelloData {
private String username;
private int age;
}
4. HTTP 요청 메시지 - 텍스트
스프링 MVC는 HttpEntity, RequestEntity, @RequestBody를 통해 텍스트로 들어오는 요청 메시지를 처리할 수 있다.
4-1. HttpEntity
HttpEntity는 메시지 바디 정보를 직접 조회할 수 있고, 응답에도 사용할 수 있다. 응답 시, 헤더 정보를 포함할 수 있다.
1
2
3
4
5
6
7
@PostMapping("/request-body")
public HttpEntity<String> requestBody
(HttpEntity<String> httpEntity) {
String messageBody = httpEntity.getBody();
log.info("messageBody={}", messageBody);
return new HttpEntity<>("ok");
}
4-2. RequestEntity, ResponseEntity
RequestEntity와 ResponseEntity는 HttpEntity를 상속받았다. ResponseEntity는 HTTP 상태코드를 설정할 수 있다.
1
2
3
4
5
6
@PostMapping("/request-body")
public ResponseEntity<String> requestBody(RequestEntity<String> responseEntity) {
String messageBody = responseEntity.getBody();
log.info("messageBody={}", messageBody);
return new ResponseEntity<>("ok", HttpStatus.OK);
}
4-3. @RequestBody, @ResponseBody
@RequestBody, @ResponseBody를 통해 HTTP 메시지 바디 정보를 편리하게 조회하고 응답할 수 있다. 헤더 정보가 필요한 경우 HttpEntity 또는 @RequestHeader를 사용하면 된다.
1
2
3
4
5
6
@ResponseBody
@PostMapping("/request-body")
public String requestBody(@RequestBody String messageBody) {
log.info("messageBody={}", messageBody);
return "ok";
}
5. HTTP 요청 메시지 - JSON
스프링 MVC는 @RequestBody를 통해 JSON으로 들어오는 요청 메시지를 처리할 수 있다.
5-1. @RequestBody, @ResponseBody
객체에 @RequesetBody를 사용하면, HTTP 메시지 바디의 JSON을 객체로 변환해준다. @ResponseBody도 마찬가지로 응답 시 반환 한 객체를 JSON으로 변환해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@ResponseBody
@PostMapping("/request-body-json")
public HelloData requestBodyJson(@RequestBody HelloData data) {
log.info("username={}, age={}", data.getUsername(), data.getAge());
return data;
}
@Data
static class HelloData {
private String username;
private int age;
}
Leave a comment