Spring MVC로 파라미터를 처리하는 방식에는 크게 6가지가 있다. Spring MVC는 HttpServlteRequest
, @RequestParam
, 매개변수
, DTO
를 사용하여 파라미터를 처리할 수 있다. 이 중, 가장 많이 쓰이는 방식은 DTO
방식이다.
Web MVC에서도 사용하였던 처리 방식으로, Spring MVC를 사용한다면 절대 사용하지 말자...
Main Page:
<h2> <a href = "${root}/param/test01?id=a&pw=b&name=홍길동"> @RequestParam 파라미터 처리 </a> </h2>
test 01로 id = a, pw = b, name = 홍길동을 넘겨줌
Controller:@GetMapping("test01") public String test01(HttpServletRequest request) { String id = request.getParameter("id"); String pw = request.getParameter("pw"); String name = request.getParameter("name"); System.out.println("id: "+id); System.out.println("pw: "+pw); System.out.println("name: "+name); System.out.println("test01"); return "redirect:/index2.jsp"; }
HttpServletRequest 객체를 이용하여, getParameters로 파라미터 값을 받는 방식이다.
Main Page :
<h2> <a href = "${root}/param/test02?id=a&pw=b"> @RequestParam 파라미터 처리(name을 제거하면 에러:400잘못된 요청 )</a> </h2> <h2> <a href = "${root}/param/test02?id=a&pw=b&name=홍길동"> @RequestParam 파라미터 처리(name을 제거하면 에러:400잘못된 요청 )</a> </h2>
Controller :
@GetMapping("test02") public String test02(@RequestParam("id") String userid, @RequestParam("pw" )String pw, @RequestParam("name") String name) { System.out.println("id: "+userid); System.out.println("pw: "+pw); System.out.println("name: "+name); System.out.println("test02"); return "redirect:/index2.jsp"; }
Main Page :
<h2> <a href = "${root}/param/test03?id=a&pw=b"> @RequestParam 파라미터 처리 - 옵션 사용 </a> </h2>
Controller :
@GetMapping("test03") public String test03(@RequestParam("id") String userid, @RequestParam(value = "pw", defaultValue="0000" )String pw, @RequestParam(value = "name" ,required = false) String name) { System.out.println("id: "+userid); System.out.println("pw: "+pw); System.out.println("name: "+name); System.out.println("test03"); return "redirect:/index2.jsp"; }
@RequestParam(value = "pw", defaultValue ="0000"); // pw가 들어오지 않을 경우, 자동으로 0000으로 설정
@RequestParam(value = "name" , required = "false"); //name이 들어오지 않을 경우, 자동으로 null값 설정
ex: Integer age -> null
따라서, int age 인 경우는 null값 설정이 안되기 때문에 오류가 난다.
Main Page:
<h2> <a href = "${root}/param/test04?id=a&pw=b&name=홍길동"> 매개변수 이름을 이용한 파라미터 처리 </a> </h2>
Controller:
@GetMapping("test04") public String test04(String id, String pw, String name, Integer age) { System.out.println("id: "+id); System.out.println("pw: "+pw); System.out.println("name: "+name); System.out.println("age :"+age);//null값 출력 System.out.println("test04"); return "redirect:/index2.jsp"; }
jsp를 보면, 파라미터이름을 id, pw, name으로 보내주고 있다. Controller에서 매개변수의 이름을 id, pw, name과 동일하게 맵핑해주었기 때문에 아무런 행동을 하지 않아도 스프링에서 자동으로 변수를 맵핑시켜준다.
age의 경우, 들어온 값이 없어 null로 출력된다.
이때, age를 int로 바꾸면 에러가 발생한다.
DTO가 생성되어 있다면, 파라미터에 해당 DTO를 파싱해주면, DTO에 스프링에서 자동으로 파라미터를 맵핑해준다.
가장 많이 쓰이고, 권장하는 방식이다
Main Page :
<h2> <a href = "${root}/param/test05?id=a&pw=b&name=홍길동"> DTO를 이용한 파라미터 처리 - 가장 많이 쓰임 </a> </h2>
Controller :
@GetMapping("test05") public String test05(Member member) { System.out.println("id: "+member.id); System.out.println("pw: "+member.getPw()); System.out.println("name: "+member.getName()); System.out.println("test04"); return "redirect:/index2.jsp"; }