
๐งฉ RequestParam , ResponseParam
- @ReuqestParam ์ด๋
ธํ
์ด์
์ HttpServletRequest ๊ฐ์ฒด์ ๊ฐ์ ์ญํ ์ ํ๋ค.
 
- HttpServletRequest์์๋ getParameter() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ง๋ง, @RequestParam์ ์ด์ฉํด์ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ๋ ์๋ค.
 
- ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๊ฐ์ผ๋ก @RequestParam์ ๋ฃ์ด์ฃผ๋ฉด๋๋ค.
 
๐งฉ์ค์ต
<body>
	<form action="/request-param-v1" method="post">
		username : <input type="text" name="username"/><br>
		age		 : <input type="text" name="age">
		<button type="submit">์ ์ก</button>
	</form>
</body>
2) HelloData
- lombok jar ํ์ผ ์ฌ์ฉ
 
- Getter Setter ToString๋ฅผ @Getter @Setter @ToString ๋์ฒด
 
@Getter @Setter @ToString
public class HelloData {
	
	private String username;
	private int age;
}
3) RequestParamController
- @RequestParam ์๋ ๊ฒฝ์ฐ required=true ๊ธฐ๋ณธ
 
- @RequestParam ์๋ ๊ฒฝ์ฐ required=false ๊ธฐ๋ณธ
 
3-1) @ResponseBody
@Controller ์ด๋
ธํ
์ด์
์ด ์์ฑ๋ ์๋ฐํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ๊ณ ์ ํ ๋๋ @ResponseBody๋ฅผ ์ฌ์ฉ 
view ์กฐํ๋ฅผ ๋ฌด์ํ๊ณ , HTTP message body์ ์ง์  ํด๋น ๋์ฉ ์
๋ ฅ 
-  response.getWriter().write("ok"); -> @ResponseBody
๋ด๊ณ ์ ํ๋ ๋ฉ์ธ์ง๋ฅผ String ํ์
์ผ๋ก ๋ฆฌํดํด์ค๋ค 
3-2) @RequestParam
- ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ๋ฐ์ธ๋ฉ
 
- name์์ฑ์ด ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ
 
3-3) defaultValue
- ํ๋ผ๋ฏธํฐ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ defaultValue๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ ์ ์ฉํ  ์ ์๋ค.
 
- ๊ธฐ๋ณธ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ required๋ ์๋ฏธ๊ฐ ์๋ค
 
- ๋น ๋ฌธ์์ด์๋ ์ ์ฉ 
 
@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"));
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		
		
		response.getWriter().write("ok");
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-v2")
	public String requestParamV2(@RequestParam("username") String username,
			@RequestParam("age") int age) 
			throws IOException {
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		return "ok";
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-v3")
	public String requestParamV3(@RequestParam String username,@RequestParam int age) 
			throws IOException {
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		return "ok";
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-v4")
	public String requestParamV4( String username, int age) throws IOException {
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		return "ok";
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-required")
	public String requestParamRequired(@RequestParam(required=true) String username,
			@RequestParam(required=false) Integer age) throws IOException {
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		return "ok";
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-default")
	public String requestParamDefault(
			@RequestParam(required=true, defaultValue = "guest") String username,
			@RequestParam(required=false, defaultValue = "-1") Integer age) 
			throws IOException {
		
		System.out.println("username : "+ username);
		System.out.println("age : "+ age);
		return "ok";
	}
	
	
	@ResponseBody
	@RequestMapping("/request-param-map")
	public String requestParamMap(@RequestParam Map<String, Object> paramMap )
			throws IOException {
		
		System.out.println("username : "+ paramMap.get("username"));
		System.out.println("age : "+ paramMap.get("age"));
		
		return "ok";
	}
	
    
	@ResponseBody
	@RequestMapping("/model-attribute-v1")
	public String modelAttributeV1(@RequestParam String username, 
			@RequestParam int age) {
		
		HelloData hello = new HelloData();
		hello.setUsername(username);
		hello.setAge(age);
		System.out.println("username : " + hello.getUsername());
		System.out.println("age : " + hello.getAge());
		
		return "ok";
	}
	
	
	
	@ResponseBody
	@RequestMapping("/model-attribute-v2")
	public String modelAttributeV2(@ModelAttribute HelloData helloData) {
		
		System.out.println("username : " + helloData.getUsername());
		System.out.println("age : " + helloData.getAge());
		System.out.println("HelloData : " + helloData.toString());
		
		return "ok";
	}
	
	
	@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 : " + helloData.toString());
		
		return "ok";
	}
}
4) hello
<body>
	<p th:text="${data}">empty</p>
	
</body>
5) ResponseViewController
5-1) ModelAndView
- Controller ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ํ ์๋ตํ  view์ view์ ์ ๋ฌํ  ๊ฐ์ ์ ์ฅ
 
@Controller
public class ResponseViewController {
	
	
	@RequestMapping("/response-view-v1")
	public ModelAndView responseViewV1() {
		ModelAndView mav = new ModelAndView("response/hello").addObject("data","hello!");
		return mav;
	}
	
	
     
	@RequestMapping("/response-view-v2")
	public String responseViewV2(Model model) {
		model.addAttribute("data","model data");
		return "response/hello";
	}
}