SpringMVC - 09. HTTP 요청 파라미터
HTTP 요청 파라미터
기존 방식
-
request.getParamter로 쿼리 파라미터와 HTML Form 모두 받음
-
@Slf4j @Controller public class RequestParamController { @RequestMapping("/request-param-v1") public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws IOException { String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); log.info("username={}, age={}", username, age); response.getWriter().write("ok"); } }
Spring MVC
01. @RequestParam 사용
-
// 단순 타입이 파라미터로 들어오면 @RequestParam도 생략가능 @ResponseBody // 문자를 그대로 반환하기 위함 (RestController와 같은 효과) @RequestMapping("/request-param-required") public String requestParamRequired( @RequestParam(required = true, value="username") String username, @RequestParam(required = false, value="age") Integer age) { log.info("username={}, age={}", username, age); return "ok"; }
-
required 옵션 : 파라미터의 필수 여부를 설정할 수 있음 (default: true)
-
defaultValue 옵션 : 파라미터의 기본값을 설정 (빈문자열을 입력해도 기본값이 들어감)
-
변수명과 HTML 태그 name이 일치하면 value 생략 가능
-
=> 타입이 단순 타입(String, int, Integer, …)이면 @RequestParam도 생략 가능
-
=> 너무 많이 생략한 느낌이 없지 않아 있어서 가독성이 살짝 부족할 수도 있음…
-
@ResponseBody // 문자를 그대로 반환하기 위함 (RestController와 같은 효과) @RequestMapping("/request-param-v4") public String requestParamV4(String username, int age) { log.info("username={}, age={}", username, age); return "ok"; }
-
파라미터를 Map으로 조회하여 한 번에 받아오기
-
@ResponseBody @RequestMapping("/request-param-map") public String requestParamMap(@RequestParam Map<String, Object> paramMap) { log.info("username={}, age={}", paramMap.get("username"), paramMap.get("age")); return "ok"; }
02. @ModelAttribute 적용
-
아래 과정을 @ModelAttribute로 자동화 가능
-
@ResponseBody @RequestMapping("/request-param-map") public String requestParamMap(@RequestParam String username, @RequestParam int age) { HelloData data = new HelloData(); data.setUsername(username); data.setAge(age); log.info("username={}, age={}", paramMap.get("username"), paramMap.get("age")); return "ok"; }
-
@ModelAttribute 적용
-
@ResponseBody @RequestMapping("/model-attribute-v1") public String modelAttributeV1(@ModelAttribute HelloData helloData) { log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); return "ok"; }
-
과정
- HelloData 생성
- 요청 파라미터의 이름으로 HelloData 객체 프로퍼티 탐색
- 같은 이름을 찾아서 setter를 찾아 바인딩
-
@ModelAttribute는 생략 가능
- 단순 타입인 경우 @RequestParam
- 나머지 @ModelAttribute (argument resolver 지정해둔 타입 제외)
댓글남기기