[ spring ] RequestParam 과 ResponseParam

Kong-al·2022년 11월 23일
0

RequestParam 과 ResponseParam

우리는 jsp로 개발을 할 때 HttpServletRequest의 getParametar() 메소드를 이용하여 값을 받아 올 수 있었다. spring에서는 @RequestParam 어노테이션을 사용하여 값을 받아올 수 있다.

	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");
	}

기존에 우리가 HttpServletRequest를 사용하여 값을 받아오던 방식이다.
아직은 jsp에 익숙해서 이 방식도 불편하다고 생각하지 않지만 @RequestParam 을 사용하면
더욱 간편하게 작성할 수 있다.

@RequestParam을 사용한 방법들에 대해 알아보자.

RequestParam

첫번째

@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2( @RequestParam("username") String username , @RequestParam("age") int age){
		
	System.out.println("username : " + username);
	System.out.println("age : " + age);
	
	return "ok";
}
  • url

    http://localhost:9090/request-param-v2?username=test&age=20

  • @ResponseBody

    view 조회를 무시하고 , HTTP message body에 직접 해당 내용 입력!!
    화면이동이 되지않고 return 값이 화면에 바로 출력된다.

  • @RequestParam

    파라미터 이름으로 바인딩된다.
    name 속성이 파라미터 이름으로 사용

두번째

http 파라미터 이름이 변수 이름과 같으면 @RequestParam("변수이름") 생략가능

@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 도 생략가능하다.
MVC내부에서 required=false를 적용한다.
추천하지 않음

@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
    required = true : 반드시 파라미터 값이 들어와야 한다. (기본값)
    required = false: 필수값은 아닐 수 있다.
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(@RequestParam(required = true) String username 
									,@RequestParam(required = false) Integer age){
	
	System.out.println("username : " + username);
	System.out.println("age : " + age);
	
	return "ok";
}

다섯번째

  • defaultValue
    파라미터 값이 없는 경우 defaultValue를 사용하면 기본값을 적용할 수 있다.
    기본값이 있기 때문에 required는 의미가 없다
    빈 문자열에도 적용된다.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParameDefault(
		@RequestParam(required = true, defaultValue = "geust") String username ,
		@RequestParam(required = false, defaultValue = "-1") Integer age){
	
	System.out.println("username : " + username);
	System.out.println("age : " + age);
	
	return "ok";
}

여섯번째

  • Map으로 조회하기
@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-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";
}

여덟번째

  • ModelAttribute
    파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주는 과정을 자동화!
@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("hello : " + helloData.toString());
    
	return "ok2";
}
  • @ModelAttribute 생략가능

    String,int 같은 단순 타입 -> @RequestParam
    객체 -> @ModelAttribute

ResponseParam

ResponseParam은 값을 화면으로 넘겨준다.

첫번째

  • ModelAndView
    controller 처리 결과 후 응답할 view 와 view에 전달할 값을 저장
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
	ModelAndView mav = new ModelAndView("response/hello").addObject("data","hello");
	return mav;
	
}

두번째

  • @Controller에서 return이 String이면 view의 논리적인 이름이 된다.
@ResponseBody	// 페이지를 이동하지않고 리턴된 문자열만 화면에 보여지게된다. 넣지안도록 주의한다.
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
	model.addAttribute("data", "model data");
	
	return "response/hello";
		
}
profile
웹개발 공부중!(❁´◡`❁)

0개의 댓글