출처:
오늘은 Controller 에서 사용되는 Annotations들을 정의해보기로 하겠다.
해당 클래스가 Controller로 사용됨을 Spring Framework에 알린다.
해당 컨트롤러는 어떤 uri 요청을 처리할지 정의하기 위해 사용
@Controller
@RequestMapping("/home") // (1)
public class HomeController {
@RequestMapping(method = RequestMethod.GET)
public String getAllEmployees(Model model) {
...
}
@RequestMapping(value = "/employees", method = RequestMethod.POST)
public String addEmployee(Model model) {
... // (2)
}
@PostMapping() // (3)
public String getAnEmployee(Model model) {
...
}
}
(1) Class Level Mapping
- 모든 메서드에 적용되는 경우 사용
- "/home"로 들어오는 모든 요청에 대한 처리를 해당 클래스에서 한다는 의미
(2) Handler Level Mapping
- 요청 uri에 대해 해당 메서드에서 처리해야 되는 경우
- "/home/employees" POST 요청에 대한 처리를 addEmployee()에서 한다는 것을 의미
(3) Handler Level Mapping2
- (2) 과 마찬가지로 요청 uri에 대해 해당 메서드에서 처리해야하는 경우 사용되며 좀더 간결하게 사용하도록 만들어졌다.
- 사용해야하는 HTTP METHOD에 알맞게 GET, POST, PUT, DELETE + Mapping() 을 사용한다.
HTTP GET 요청에 대해 매칭되는 request parameter 값이 자동으로 들어간다.
- uri 뒤에 붙는 parameter 값을 가져올 때 사용한다.
- ex) http://localhost:8080/home?index=1&page=2
@GetMapping("/home")
public String show(@RequestParam("page") int page) {
...
}
HTTP 요청에 대해 매칭되는 request parameter 값이 자동으로 들어간다.
- uri에서 각 구분자에 들어오는 값을 처리해야 할 때 사용한다.
- ex) http://localhost:8080/index/1
- REST API에서 값을 호출할 때 주로 많이 사용한다.
@PostMapping("/indx/{idx}")
@ResponseBody
public boolean deletePost(@PathVariable("idx") int idx) {
return postService.deletePost(idx);
}
EX) @RequestParam과 @PathVariable 동시 사용 예제
@GetMapping("/user/{userId}/invoices")
public List<Invoice> listUsersInvoices(@PathVariable("userId") int userId,
@RequestParam(value = "date", required = false) Date dateOrNull) {
}
반드시 HTTP POST 요청에 대해서만 처리한다.
- HTTP POST 요청에 대해 request body에 있는 request message에서 값을 얻어와 매칭한다
- ReuqestData를 바로 Model 이나 클래스로 매핑한다.
- 이를테면 JSON 이나 XML 같은 데이터를 적절한 messageConverter로 읽을 때 사용하거나 POJO 형태의 데이터 전체로 받는 경우에 사용한다.(일반적으로 DTO로 받는다)