html페이지로부터 전달되는 파라미터를 받아올때 @RequestParam 어노테이션을 사용해서 httpServletRequest 를 사용하지 않고도 데이터를 전달 받을 수 있다.
만약 페이지에서 name 속성을 동일하게 주어지면 @RequestParam을 이용해서 List형태로 받는것도 가능하다.
<form action="/submit" method="get"> name=value1 <input type="text" name="value1" /> name=value1 <input type="text" name="value1" /> <input type="submit" value="submit" /> </form>이렇게 textbox를 동일한 이름으로 submit을 하게 되면 파라미터는
value1=1111&value1=2222처럼 동일한 파라미터 명을 가지게 되고 이 값을 스프링의 Controller에서 List형태로 받으려면
@RequestMapping("/submit") public String submit(@RequestParam(value="value1", required=true) List<String> values) { System.out.println(values.size()); //2가 나오는것을 볼수 있다. return null; }처럼 사용할수 있다. 그런데 @RequestParam은 ,(comma)형태로 데이터를 보내게되도 ,(comma)를 구분자로하여 데이터를 쪼개서 List형태로 데이터를 변환한다.
//전달된 파라미터가 value1=111,222,333,444 형태라면 @RequestMapping("/submit") public String submit(@RequestParam(value="value1", required=true) List<String> values) { for(String value : values) { System.out.println(value); } //출력결과는 //111 //222 //333 //444 return null; }만약 html 뷰 페이지에서 다음과 같이 추가 버튼을 눌러 동적으로 입력 폼을 추가 하게되게끔 개발을 했다고 하면
<form action="/submit" method="get"> name=value1 <input type="text" name="value1"/><button type="button" onclick="textbox추가 로직">추가</button> <input type="submit" value="submit" /> </form>Controller에서는 몇개의 textbox가 추가가 될지 모르니 위와같이 @RequestParam을 이용해서 List형태로 받게 될것이다. 이때 textbox가 1개이고(추가버튼을 누르지 않고) 입력된 데이터가 ,(comma)로 구분되는 문자가 들어오게 된다면 우리는 의도했던것과는 다르게 사이즈가 1개이상인(콤마갯수 + 1개) List를 돌려받게 될것이다. 위와같은 문제가 발생될 소지가 있다면 어쩔수 없이 httpServletRequest의 getParameterValues 메소드를 사용하여 직접 받을 수 밖에 없으니 comma에 주의해서 @RequestParam 어노테이션을 사용하자.
'Framework > SPRING FRAMEWORK' 카테고리의 다른 글
[Spring 3.2] Interceptor에서 Controller의 어노테이션 체크하기 (2) | 2013.12.02 |
---|---|
[Spring 3.2] @ControllerAdvice를 이용한 익셉션 처리 (0) | 2013.11.29 |
[Spring Framework] @Transactional로 구현한 트랜젝션에서 수동 rollback 하기 (5) | 2013.11.14 |
Spring - Spring + iBatis 연동시 iBatis Transaction 실행 안되는 문제 (0) | 2010.12.13 |
Spring - Quartz를 사용하여 스케쥴러 구현하기 (12) | 2010.09.29 |