1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @Controller public class SearchController { //Controller로 실행되는 메서드안에 '파라미터이름 == 매개변수명' 으로 파라미터 저장하는 방법. @RequestMapping("/search/internal.do") public ModelAndView searchInternal(String query, @RequestParam("p") int pageNumber) { System.out.println("[/search/internal.do] query = " + query + ", pageNumber = " + pageNumber); return new ModelAndView("search/internal"); } String query = ""; @RequestMapping("/search/external.do") public ModelAndView searchExternal(String query, @RequestParam(value = "p", defaultValue = "1") int pageNumber) { System.out.println("[/search/external.do] query = " + query + ", pageNumber = " + pageNumber); return new ModelAndView("search/external"); } /* 서로 이름이 다른 p와 pageNumber는 자동저장이 안되기때문에, @RequestParam을 명시해서 'p'라는 name으로 전달되는 값은 'pageNumber'의 값 저장할 수 있다. (p == pageNumber) 단, 어노테이션을 사용한 @RequestParam은 디폴트값으로 required속성이 true이기때문에 반드시 값이 있어야한다. 만약 p라는 이름으로 전달되는 값이 없다면 null이 저장되게되는데 int 타입인 pageNumber에는 null 저장이안되기때문에 type mismatch가 뜨면서, 400에러가 뜬다. 그러기위해 값이 전달되면 value ="p"를 저장하고, 전달되는값이 없다면 defaultValue=""를 따로 지정해주어야한다 */ } | cs |
1. 파라미터이름('query') == 매개변수명('query') 으로 저장
String query 라고 Controller안의 메서드의 매개변수로 변수를 선언해주면,
보내지는 parameter의 name이 query인 태그와 매칭되어 자동으로 String query에 저장된다
예제 1)
jsp에서 form submit으로 전송하게될때,
<input type = "text" name ="query" > 라는 input 태그에 값을 'JAVA'라고 입력해서 submit을 한다면
String query = request.getParameter("query")로 꺼내 저장하던 과정을
Controller안의 메서드의 매개변수로 바로 변수 선언하면
이 과정이 생략된채로 바로 query안에 == 'JAVA'라는 값이 저장되게 된다.
예제 2)
전송하는 URL경로에서 /search/XXXXX.do?query=JAVA 로 입력해도 위와 마찬가지의 결과가된다.
2. 파라미터이름('p') == 매개변수명 ('pageNumber')
파라미터 이름과 매개변수명을 다르게 값을 저장해주고 싶다면
서로 이름이 다른 p와 pageNumber는 자동저장이 안되기때문에,
@RequestParam(value="p") int PageNumber 라고 지정해줄 수 있다.
단,
어노테이션을 사용한 @RequestParam은 디폴트값(default)으로
'required' 속성이 'true'이기때문에 반드시 값이 있어야한다.
만약 p라는 이름으로 전달되는 값이 없는걸로 저장하고싶다면
required속성을 false로 걸어주면된다.
그러나 또 주의할점은 이럴때는 null이 저장되게되는데
int 타입인 pageNumber에는 null 저장이안되기때문에 type mismatch가 뜨면서, 400에러가 뜬다.
그러기위해
값이 전달되면 == value ="p"를 저장하고,
전달되는값이 없다면 == defaultValue="?"를 따로 지정해줘서 분기 처리해야한다
'JAVA > Spring' 카테고리의 다른 글
web.xml 전체경로(.do)와 Servlet기반 경로 매칭 설정(/폴더) (0) | 2018.09.12 |
---|---|
Spring MVC - 뷰 이름 자동지정법 (0) | 2018.09.12 |
Spring MVC - 예제(List로 출력) (2) | 2018.09.12 |
@Autowired, @Resource, @Inject의 차이 (0) | 2018.09.11 |
Spring MVC - 파라미터저장법①(Controller 메서드의 매개변수 - DTO) (2) | 2018.09.11 |