@RequestMapping(value = "/hello-spring", method = RequestMethod.GET)
public String helloSpring() {
...
}
@RequestMapping에 method 속성으로 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 호출된다. (GET, HEAD, POST, PUT, PATCH, DELETE 모두 허용) 위의 코드에서는 메서드를 지정하였으므로 POST 요청을하면 HTTP 405 상태코드를 반환한다.
@GetMapping(value = "/hello-spring")
HTTP 메서드를 축약한 애노테이션을 사용하는 것이 더 직관적이다. 코드를 보면 내부에서 @RequestMapping과 method 를 지정해서 사용하는 것을 확인할 수 있다.
@GetMapping("/hello/{userId}")
public String helloSpring(@PathVariable("userId") String data) {
...
}
'/hello/woo'와 같이 리소스 경로에 식별자를 넣는다. @PathVariable의 이름과 파라미터 이름이 같으면 생략이 가능하다.
@GetMapping("/hello/users/{userId}/orders/{orderId}")
public String helloSpring(@PathVariable String userId, @PathVariable Long
orderId) {
log.info("userId={}, orderId={}", userId, orderId);
...
}
PathVariable을 다중으로도 사용할 수 있다.
@GetMapping("/hello")
public String helloSpring(@RequestParam("userId") String data) {
...
}
URL 호출 형식이 /hello?userId=hello 이고 다중으로 사용할 수 있다.
@GetMapping(value = "/hello", params = "mode=debug")
public String helloSpring() {
...
}
특정 파라미터가 있거나 없는 조건을 추가할 수 있지만 잘 사용하지는 않는다.
@GetMapping(value = "/hello", headers = "mode=debug")
public String helloSpring() {
...
}
params 매핑과 비슷하지만, HTTP 헤더를 사용한다.
@PostMapping(value = "/hello", consumes = "application/json")
public String helloSpring() {
...
}
HTTP 요청의 Content-Type 헤더를 기반으로 미디어 타입으로 매핑하고 맞지 않으면 HTTP 415 상태코드를 반환한다. application/json은MediaType.APPLICATION_JSON_VALUE로 대체할 수 있다.
@PostMapping(value = "/hello", produces = "text/html")
public String helloSpring() {
...
}
HTTP 요청의 Accept 헤더를 기반으로 미디어 타입으로 매핑하고 맞지 않으면 HTTP 406 상태코드(Not Acceptable)을 반환한다. Accept 헤더는 클라이언트가 해당 자료형을 받을 수 있다는 의미이다.
출처: 스프링 MVC 1편 (김영한)