Old Branch

Spring MVC 예제 - @RequestMapping 어노테이션 예제

woolbro 2019. 7. 16. 11:30
반응형

이번 포스팅은 이전에 작성한 직원 관리 예제를 가지고 설명을 하려고 합니다.

 

[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에 각각 다른 요청 방법으로, 유형 별로 컨트롤러를 나누어 들어오게 됩니다.