Spring MVC 예제 - @RequestMapping 어노테이션 예제
이번 포스팅은 이전에 작성한 직원 관리 예제를 가지고 설명을 하려고 합니다.
[Java/Spring-framework] - Spring MVC 예제 - 직원 관리 프로그램
Spring MVC 예제 - 직원 관리 프로그램
이번 포스팅은 Spring MVC의 예제입니다. 간단한 직원 관리 프로그램을 작성 해 보려고 합니다. Spring 4.1.4 버전을 이용하고, DB 링크는 아직 걸지 않았습니다. 직접 리스트를 추가 해 주는 형태로 데이터를 넣..
woolbro.tistory.com
위의 포스팅에서는, DB 접근을 제외한 Controller, View, Model, VO, DAO를 작성 해 보았습니다. 아주 기본적이고 간단한 예제라서 작성까지 오래 걸리지 않는 예제였습니다.
이번 포스팅에서는 URL을 컨트롤러에 매핑 해 주는 역할을 한 @RequestMapping 어노테이션을 가지고 설명을 하려고 합니다.
컨트롤러에 @RequestMapping 어노테이션을 통해 URL을 매핑 해 주는데요, 이 매핑을
1) 메서드 수준의 @RequestMapping
2) 클래스 수준의 @RequestMapping
3) HTTP Request Method만 사용하는 @RequestMapping
이렇게 세가지로 나누어서 설명과 예를 들어보려고 합니다.
1) @RequestMapping 메소드 레벨
CRUD 작업을 모두 구현했다고 가정 하였을때, 이전의 코드를 사용해 진행 해 본다면, 아래와같습니다.
@Controller
public class EmployeeController
{
@RequestMapping("/employee-management/employees")
public String getAllEmployees(Model model)
{
//application code
return "employeesList";
}
@RequestMapping("/employee-management/employees/add")
public String addEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping("/employee-management/employees/update")
public String updateEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping(value={"/employee-management/employees/remove","/employee-management/employees/delete"})
public String removeEmployee(@RequestParam("id") String employeeId)
{
//application code
return "employeesList";
}
}
마지막 removeEmployee 메서드 처럼, 다수개의 URL을 매핑 할 수 있습니다.
value = { "Value 1" , "Value 2"}
로 작성을 해 준다면, URL Value1 로도 접근이 가능하고, URL Value2 로도 접근이 가능합니다.
2) @RequestMapping 클래스 레벨
이제 각 메서드에 적용 했던 어노테이션의 공통적인 부분을 묶어 보도록 하겠습니다.
@Controller
@RequestMapping("/employee-management/employees/*")
public class EmployeeController
{
@RequestMapping
public String getAllEmployees(Model model)
{
//application code
return "employeesList";
}
@RequestMapping("/add")
public String addEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping("/update")
public String updateEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping(value={"/remove","/delete"})
public String removeEmployee(@RequestParam("id") String employeeId)
{
//application code
return "employeesList";
}
}
공통적인 부분을 클래스 단위로 RequestMapping 해 주고, 각 메서드 마다 Mapping을 한번 더 해준다면 URL은 클래스 - 메서드 순으로 읽혀지게 됩니다.
즉, String updateEmployee 메서드를 예로 들면 URL은 /employee-managemnet/employees/update 가 되는 것 입니다.
3) @RequestMapping HTTP Request Method
이외에도 HTTP 요청 유형 값으로만 매핑(RequestMapping) 할 수 있습니다. 이런 유형의 디자인은 RESTful Web Service에서 일반적으로 등장하는 내용입니다.
@Controller
@RequestMapping("/employee-management/employees")
public class EmployeeController
{
@RequestMapping (method = RequestMethod.GET)
public String getAllEmployees(Model model)
{
//application code
return "employeesList";
}
@RequestMapping (method = RequestMethod.POST)
public String addEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping (method = RequestMethod.PUT)
public String updateEmployee(EmployeeVO employee)
{
//application code
return "employeesDetail";
}
@RequestMapping (method = RequestMethod.DELETE)
public String removeEmployee(@RequestParam("id") String employeeId)
{
//application code
return "employeesList";
}
}
위의 예에서는 동일한 URL에 요청 방법(Request Method) 만 다르게 작성한 것입니다. 같은 URL에 각각 다른 요청 방법으로, 유형 별로 컨트롤러를 나누어 들어오게 됩니다.