개발 환경에 따라서 request 객체를 가져오는 방식을 선택해야하는 경우들이 있습니다. 서블릿 레벨에서 가져와야할 때도 있고 스프링에서 제공하는 기능을 이용할 수 있는 경우도 있습니다. request 객체로 부터 다양한 방법으로 파라미터를 가져오는 방법을 알아보겠습니다.

 

 

 Request 객체를 이용해 파라미터 가져오기

 

 

1. HttpServletRequest 객체 (서블릿 레벨)

현재는 사용하지 않지만, 레거시 프로젝트에서 사용해야하는 경우가 종종 발생함.

@RequestMapping("/example")
public ModelAndView example(HttpServletRequest request) {
    String paramValue = request.getParameter("paramName");
    ...
}

HttpServletRequest 객체를 사용해 요청에서 직접 파라미터를 가져오는 방법.

 

여기서 부터 아래는 SpringMVC 기능을 활용하여 값을 가져오는 유형들입니다.

 

2. @RequestParam 애노테이션 사용

활용도가 높고 다양한 옵션을 제공한다.

@RequestMapping("/example")
public ModelAndView example(@RequestParam("paramName") String paramValue) {
    ...
    mav.addObject("paramValue", paramValue);
    return mav;
}

실제 요청 들어온 쿼리 파라미터와 이름이 일치하면 값을 받을 수 있음.

 

@RequestMapping("/example")
public ModelAndView example(@RequestParam(value = "paramName", defaultValue = "default") String paramValue) {
    ...
    mav.addObject("paramValue", paramValue);
    return mav;
}

기본 값을 설정할 수 있음.

 

@RequestMapping("/example")
public String example(@RequestParam(value = "paramName", required = false) String paramValue) {
    // 파라미터가 없어도 예외 없이 호출 가능
    return "viewName";
}

 

파라미터가 없는 경우 Optional 하게 처리가능함.

 

@RequestMapping("/example")
public String example(@RequestParam("param1") String param1,
                      @RequestParam("param2") int param2,
                      @RequestParam(value = "param3", required = false, defaultValue = "default") String param3) {
    return "viewName";
}

여러개의 파라미터를 매핑할 수 있음. param1, param2는 required 옵션 기본 값으로 필수값이 설정되어, 파라미터가 없으면 예외가 발생한다.

그리고 가져오는 파라미터를 변환 가능한 경우 특정 자료형을 자동으로 변환할 수 있다. 문자열을 기본으로 숫자타입(int, long, double), Date와 같은 클래스 타입(특정 포맷의 문자열인 경우)도 자동으로 변환가능하다.

 

3. 경로변수 추출하기 @PathVariable

경로관련해서 매핑이 필요한 경우. 페이징 처리를 하는 경우 사용.

@RequestMapping("/example/{id}")
public ModelAndView example(@PathVariable("id") String id) {
    ...
    mav.addObject("id", id);
    return mav;
}

RequestMapping 애노테이션을 사용해 특정 부분을 변수로 매핑한 경우, @PathVariable을 통해 값을 가져올 수 있음.

 

 

4. 객체 바인딩하여 가져오기 @ModelAttribute

폼 데이터를 받아오는 등 객체와 매핑해서 값을 받아와야되는 경우에 사용.

public class UserForm {
    private String name;
    private int age;

    ... Getter, Setter ...
}

@RequestMapping("/example")
public ModelAndView example(@ModelAttribute UserForm userForm) {
    ModelAndView mav = new ModelAndView("viewName");
    mav.addObject("userForm", userForm);
    return mav;
}

여러 개의 파라미터를 객체에 직접 매핑하여 처리할 수 있음. 파라미터들의 각 key 값들이 클래스의 필드와 매핑이 되도록 해야함. URL이 /example?name=John&age=30라면 userForm 객체에 name과 age가 자동으로 매핑된다.

 

 

 정리하면 HttpServletRequest의 getParameter 부터 SpringMVC 기능으로 제공되는 @RequestParam, @PathVariable, @ModelAttribute를 활용해 요청 쿼리에서 다양한 방법으로 값을 가져오는 방법까지 알아보았습니다. 각 에노테이션 이름에서도 알 수 있듯 조금씩 용도가 다른 것을 잘 이해하고 알맞게 사용하면 좋을 것 같습니다. 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기