개발 환경에 따라서 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를 활용해 요청 쿼리에서 다양한 방법으로 값을 가져오는 방법까지 알아보았습니다. 각 에노테이션 이름에서도 알 수 있듯 조금씩 용도가 다른 것을 잘 이해하고 알맞게 사용하면 좋을 것 같습니다.
'블로그 > 개발일지 (TIL)' 카테고리의 다른 글
간단한 레디스 명령어 정리 (GET, SET, 대표 자료형), CAP 이론, 레디스 책 추천 (0) | 2023.08.18 |
---|---|
인텔리제이 Gerrit 플러그인에서 지원하는 git 명령어 정리 (0) | 2023.08.18 |
인텔리제이 git rebase 기능, 웹에서 git 연습하기, redis sentinel, cluster (0) | 2023.08.17 |
스프링 공식 튜토리얼로 실습방법, 인텔리제이 단축키 3가지 소개, lombok 설정, 타임리프, Gradle 스프링 플러그인, bootRun (2) | 2023.04.26 |
스프링 RequestMapping, 컨텍스트 호출, 배포서술자, WEB-INF (0) | 2023.03.16 |
최근댓글