[Spring] @RequestParam
참고 문서
required
- spring framework 2.5 or higher
RequestParam annotation은 key=value
형태로 화면에서 넘어오는 쿼리스트링 혹은 폼 데이터를 메서드의 파라미터로 지정한다. 대체로 파라미터의 개수가 적을때 사용한다.
method( @RequestParam( PARAM ) Obj )
method( @RequestParam Map)
param
: 전달되는 파라미터의 이름을 지정한다. 이름 외에 기본값(defaultValue), 필수여부(required)를 설정할 수 있다. 값이 할당될 변수의 타입이 Map 혹은 MultiValueMap일 땐 명시하지 않는다.obj
: PARAM으로 지정된 이름과 일치하는 파라미터의 값을 할당할 변수. 보통 String 타입을 선언하지만 넘 어온 값이 반드시 숫자일 경우에 한해서 int 등의 숫자 타입도 가능하다.
이름과 변수를 지정하는 방식
아래에서 xxx/editBlog.do?blogId=3
과 같이 접근할 때, editBlogHandler 메서드의 파라미터인 blogId에는 3이 셋팅된다. 필수 요건이 아닐 경우, @RequestParam(value="id", required="false")
와 같이 옵션을 주고 사용할 수 있다.
@Controller
public class BlogController {
@RequestMapping("/editBlog")
public ModelMap editBlogHandler(@RequestParam("blogId") int blogId) {
blog = blogService.findBlog(blogId);
return new ModelMap(blog);
}
// ...
}
@RequestMapping(value="/...", method={RequestMethod.GET, RequestMethod.POST})
public String submit(HttpServletRequest req,
@RequestParam(value="num1") int num1,
@RequestParam(value="num2") int num2,
@RequestParam(value="oper") String oper) throws Exception {
// value: request parameter의 이름
// 생략
}
//@RequestParam 어노테이션이 적용된 파라미터는 기본적으로 필수 파라미터이다.
//따라서, 명시한 파라미터가 존재하지 않을 경우 400 에러가 발생한다.
//여기서 파라미터에 값이 있을수도 없을수도 있는 로직을 구현하려면 다음처럼 작성한다.
@RequestMapping(value="/...", method={RequestMethod.GET, RequestMethod.POST})
public String submit(HttpServletRequest req,
@RequestParam(value="num1", defaultValue = "0") int num1,
@RequestParam(value="num2", defaultValue = "0") int num2,
@RequestParam(value="oper", required=false) String oper)
throws Exception {
// 생략
}
Map 방식
값을 할당할 변수의 타입을 Map 혹은 MultiValueMap으로 사용하는 방법.
@RequestMapping("/faqDetail")
public String faqDetail(@RequestParam HashMap<String, String> map) {
String searchValue = map.get("searchValue");
// req.getParameter("searchValue") 와 같다.
return "/board/faq/faqDetail";
}