@RequestParam D03

최성진·2023년 4월 18일
0

SpringBoot

목록 보기
3/6

HTTP 요청 파라미터 -@RequestParam

  • 스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다.

1. 반환타입이 없고 response에 값을 집어넣는 방식, view X- 스프링 스럽지 못하다

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

2. 스프링 스러운 방법

	@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);
		return "ok";
	}
  • 파라미터 이름으로 바인딩
  • @RequestParam("username") String memberName
    = String memberName = request.getParameter("username");
    즉 @RequestParam("username") 이게 키값이라고 보면된다
  • @ResponseBody =
    view 조회를 무시하고, HTTP message body에 직접 해당 내용 입력
    (즉 return "ok"; 하게되면 페이지에 문자열 ok가 출력됨)

3. @RequestParam("XXX") 생략

@ResponseBody
	@RequestMapping("/request-param-v3")
	public String RequestParamV3(@RequestParam("username") String username, @RequestParam("age") int age)   {
		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)   {
		System.out.println("username : " + username);
		System.out.println("age : " + age);
		return "ok";
	}
    
  • @RequestParam 사용시
    HTTP 파라미터 이름이 변수 이름과 같으면
    @RequestParam("XXX") 생략가능

4. @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";
	}
  • String, int 등의 단순 타입이면 @RequestParam 도 생략가능
    하지만 너무 모호해지기 떄문에 이것까지 생략하는것은 권장하지 않는다.
  • @RequestParam을 사용할때 @required 기본값이 false 로 되어있음 그래서 int 를 Integer로 바꿔주면 오류가 나지 않는다.

5. required(필수값)

@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";
	}
  • @RequestParam을 사용할때 required 기본값이 false 로 되어있다.
  • required = true : 반드시 파라미터 값이 들어와야 한다.
    int age -> Integer age
  • null을 int에 입력하는 것은 불가능, 따라서 Integer 로 변경해야함.
    반대로 필수값으로 받아오게되면 int로 사용 할수있다.

6. defaultValue(기본값)

@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";
	}
  • dafaultValue 사용시 기본 값 세팅 할 수 있다.
  • 빈 문자의 경우에도 적용된다.
    url로 (/request-param-defalut?username=)
    보내도 기본값이 적용된다.
  • 숫자같은 경우는 0도 나올수 있기 떄문에 -1같은 그 상황에서 나오기 힘든 값을 지정해주면 디폴트 값으로 알아보기 쉽게 지정할 수 있다.

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

8. modelAtribute

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

9.ResponseView

@ResponseBody
@RequestMapping("/response-view-v3")
public String responseViewV3(Model model) {
	model.addAttribute("data", "hello3");
	return "response/hello";
}

String 을 반환하는 경우 - view or http 메시지

  • @ResponseBody 가 없으면 : response/hello 로 뷰 리졸버가 실행되어서 뷰를 찾고 렌더링
  • @ResponseBody 가 있으면 : http 메시지를 바디에 직접 response/hello라는 문자열을 그대로 반환하고 뷰 리졸브를 실행하지 않는다.
profile
마부리입니다

0개의 댓글