Spring_Controller_파라미터 전송&&데이터 받아오는 방법 정리
<파라미터 전송 받기>
1) HttpServletRequest 방식
: JSP/Servlet 방식
@requestMapping(value="login.me", method = RequestMethod.POST)
public void login(HttpServletRequest request) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
}
2) @RequestParam 방식
: 스프링에서 좀 더 간단하게 파라미터를 받아올 수 있는 방법
: HttpServletRequest와 비슷하게 request객체를 이용하여 데이터를 전송받으나 원하는 타입으로 자동 형변환 가능
value
: view에서 받아올 파라미터 이름, 어노테이션에 들어가는 속성이 하나 뿐이라면 자동으로 value가 인지하여 생략가능
defaultValue
: 값이 null이거나 들어오지 않았을 때 기본적으로 들어갈 데이터 지정
required
: 해당 파라미터가 필수적인 설정, 기본 값 true, 필수 값은 아니고 나중에 사용하려고 미리 만든 값
@RequestMapping(value="login.me", method = RequestMethod.POST)
public void login(@RequestParam("id") String id, @RequestParam("pwd") String pwd) {}
public void login(@RequestParam(value="id") String id, @RequestParam(value="pwd") String pwd) {}
public void login(@RequestParam(value="id", defaultValue="hello") String id, @RequestParam(value="pwd", defaultValue="world") String pwd) {}
public void login(@RequestParam(value="id", defaultValue="hello") String id,
@RequestParam(value="pwd" defaultValue="world") String pwd,
@RequestParam(value="test" required=false, defaultValue="spring") String test){
System.out.println("test : " + test)
}
존재하지 않은 값을 반환 받으려할 때 400에러가 뜬다.
나중에 사용할 수 있는 값을 required=false로 설정해서 넣어둔다.
3) ModelAttribute 방식
: 요청 파라미터가 많을 경우 객체 타입으로 넘겨 받는다.
: 파라미터명이랑 셋터롸 이름이 같아야 매핑이 된다. --> **이름이 다르면 매핑이 안된다, 기본생성자가 없으면 안된다.
(기본생성자로 객체를 만들어줘야 셋터도 진행된다.)
@RequestMapping(value="login.me" method = RequestMethod.POST)
public void login(@ModelAttribute Member m) {
System.out.println("m : " + m);
}
<데이터 전달하기>
1) Model 객체 사용
: Servlet에서 사용하던 requestScope와 비슷 = scope는 request
: 뷰에 전달하고자 하는 데이터를 맵형식(key, value) 으로 담을 때 사용
2) ModelAndView 객체 사용
: Model + View --> 데이터와 뷰를 한 번에 담는 객체
: 반환값도 ModelAndView이다.