Spring은 URL로 들어온 요청을 Mapping된 URL을 찾아 처리한다. 이때 URL을 Mapping 하는 Annotation이 @RequestMapping과 그로부터 파생된 @Get, @Post, @Put, @Update,.. Mapping이다. 기존 형태는 @RequestMapping(value = "test", method= RequestMethod.GET) 의 형태를 가지고 있었지만 Spring 4.3버전부터 Method Mapping을 사용할 수 있게 되며 코드 가독성이 높아졌다.
@RequestMapping
@RequestMapping의 경우 HTTP 요청과 컨트롤러의 메소드를 Mapping 하기위해 사용된다. 다양한 속성을 가지고 있으며 HTTP 메서드, 경로, 요청 헤더, 요청 매개변수 등을 기반으로 요청을 Mapping 할 수 있다.
@RequestMapping의 여러가지 사용법
@RequestMapping의 경우 Class와 Method에 적용할 수 있다. value를 사용해 url을 지정할 수 있고, method를 사용해 적용될 method를 지정할 수 있다.
메소드에 value와 method를 사용한 URL Mapping이다. GET 방식으로 작동되며, "/test" URL로 접근시 작동된다. 뿐만 아니라 다른 Method도 적용이 가능한데, POST, PUT, PATCH, DELETE 등 주로 사용되는 5가지의 Method가 있다.
Class에 URL을 지정하여 메소드에 공통 URL path 설정
@Controller
@RequestMapping("/page")
public class Test{
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String a(){
return "test";
}
}
클래스에 적용하여 URL path를 지정하고, 하위 메소드에는 "/test" URL을 Mapping하여 "/page/a" 에대한 URL경로를 적용하였다. 이렇듯 클래스 또는 메소드에 적용위치에 따라 적용이 다르게 된다.
여러개의 URL을 하나의 메소드에 Mapping
@RequestMapping({"test1","test2"})
public String test(){
return "test";
}
value에 {}와 같은 배열선언을 통해 여러개의 URL을 하나의 메소드에 Mapping 할 수도 있다.
경로 변수 사용
@RequestMapping("/test/{id}")
public String test(
@PathVariable String id
){
return "test";
}
Method Mapping의 경우 Spring 3.4버전부터 추가된 Mapping 어노테이션이다. 기존 @RequestMapping의 method 부분만을 사용하여 "@GetMapping" 이와 같은 형태로 작성한다. RequestMapping과 다른점은 클래스에 적용이 불가능하다. 종류는 많지만 실제로 작동하는 방식은 GetMapping을 제외하고는 모두 동일하다. 하지만 RestAPI를 만들기위해선 적절하게 기능에 맞는 Mapping을 사용해야한다.
@GetMapping
@GetMapping("/test")
public User test(){
return "test";
}
가장 기본적인 Mapping인 GetMapping이다. 통상적으로 URL 이동을 위해 사용한다. 데이터 전송시 URL을 이용한 파라미터로 전송하기 때문에 보안이 취약하다. 리소스의 조회를 위해 사용한다.
@PostMapping
@PostMapping("/test")
public User test(){
return "test";
}
PostMapping, Server의 리소스를 생성하고자 할때 사용한다. 흔히 로그인, 회원가입, form을 이용한 게시글 작성 등에 사용되며, 데이터가 Header의 본문을 통해 전송되기 때문에 Get방식에 비해 상대적으로 보안이 강하다는 부분이 있다.
@PutMapping
@PutMapping("/test")
public User test(){
return "test";
}
PutMapping, Server의 리소스를 수정하고자 할때 사용한다. 데이터 전송방식은 Post와 동일하게 Header의 본문을 통해 전달된다.
@PatchMapping
@PatchMapping("/test")
public User test(){
return "test";
}
PatchMapping, Server의 리소스 일부를 수정하고자 할때 사용한다. Put과 다른점은 일부 수정한다는것에 있다. 데이터 전송방식은 Post와 동일하게 Header의 본문을 통해 전달된다.
@DeleteMapping
@DeleteMapping("/test")
public User test(){
return "test";
}
DeleteMapping, 이름 그대로 Server의 리소스를 삭제할때 사용된다. 데이터 전송 역시 Post와 마찬가지고 Header의 본문을 통해 전송된다.
브라우저에서는 Get, Post의 요청만 보낼 수 있다.
브라우저에서 요청을 보내는 방식은 기본적으로 Get, Post 방식으로 적용된다. 만약 다른 Put, Patch, Delete 의 method를 사용하려면 다른 방법이 필요하다.