HTTP message body
에 직접 해당 내용 입력@RequestParam : 파라미터 이름으로 값 바인딩
기본 사용 방법
@ResponseBody @RequestMapping("/request-param-v2") public String requestParamV2(@RequestParam("username") String memberName, @RequestParam("age") int memberAge){ // 콘솔에 가져온 파라미터값 출력 System.out.println("username : " + memberName); System.out.println("age : " + memberAge); // 화면에는 ok 출력 return "ok"; }
HTTP 파라미터 이름이 변수 이름과 같으면 @RequestParam("XXX"
) 생략 가능
@ResponseBody @RequestMapping("/request-param-v3") public String requestParamV3(@RequestParam String username, @RequestParam int age){ System.out.println("username : " + username); System.out.println("age : " + age); return "ok"; }
String, int 등의 단순 타입이면 @RequestParam
도 생략 가능
(* 코드의 직관성을 위해 일부러 표기하기도 함)
@ResponseBody @RequestMapping("/request-param-v4") public String requestParamV4(String username, int age){ System.out.println("username : " + username); System.out.println("age : " + age); return "ok"; }
required 옵션 : true
이면 반드시 파라미터 값이 들어와야 함
false
일 경우 누락 가능
- 다만 int 등의 단순 변수 타입에
null
을 입력할 수 없으므로 Integer 등의wrapper
타입으로 변경해야 함@ResponseBody @RequestMapping("/request-param-required") public String requestParamRequired( // username 누락 불가 @RequestParam(required = true) String username, // age 누락 허용, 누락시 null (Integer 타입으로 변경) @RequestParam(required = false) Integer age){ System.out.println("username : " + username); System.out.println("age : " + age); return "ok"; }
defaultValue 옵션 : 파라미터에 기본값을 세팅
- 빈 문자열의 경우에도 적용된다.
예 :(/request-param-default?username= )
@ResponseBody @RequestMapping("/request-param-default") public String requestParamDefault( @RequestParam(required = true, defaultValue = "guest") String username, @RequestParam(required = false, defaultValue = "-1") Integer age){ System.out.println("username : " + username); System.out.println("age : " + age); return "ok"; }
Map 사용 : Map <key, value>
@ResponseBody @RequestMapping("/request-param-map") public String requestParamMap(@RequestParam Map<String, Object> paramMap){ System.out.println("username : " + paramMap.get("username")); System.out.println("age : " + paramMap.get("age")); return "ok"; }
@ResponseBody @RequestMapping("/model-attribute-v2") public String modelAttributeV2(@ModelAttribute HelloData helloData) { // 자동으로 객체에 값을 담아오므로 바로 get 가능 System.out.println("username : " + helloData.getUsername()); System.out.println("age : " + helloData.getAge()); System.out.println(helloData.toString()); return "ok"; }
@ModelAttribute
어노테이션도 생략이 가능하다.@ResponseBody @RequestMapping("/model-attribute-v3") public String modelAttributeV3(HelloData helloData) { System.out.println("username : " + helloData.getUsername()); System.out.println("age : " + helloData.getAge()); System.out.println(helloData.toString()); return "ok"; }
addObject
메서드로 데이터를 담아 리턴한다.@RequestMapping("/response-view-v1") public ModelAndView responseViewV1() { ModelAndView mav = new ModelAndView("response/hello") .addObject("data","hello"); return mav; }
addAttribute : Model을 사용해 데이터를 반환할 때는 모델 객체에 addAttribute
로 데이터를 담고, 매핑할 뷰 경로를 리턴한다.
@RequestMapping("/response-view-v2") public String responseViewV2(Model model) { model.addAttribute("data","hello2"); return "response/hello"; }
@ResponseBody
어노테이션을 사용할 경우 뷰 리졸버를 실행하지 않고 HTTP 메시지 바디에 직접 리턴한 문자열을 출력한다.
@ResponseBody @RequestMapping("/response-view-v3") public String responseViewV3(Model model) { model.addAttribute("data","hello3"); // "response/hello" 가 그대로 문자열로 출력됨 return "response/hello"; }