본문 바로가기
Spring Tutorial

[스프링MVC 기본 기능 5] HTTP 요청 파라미터 - @RequestParam

by 미소5 2023. 8. 22.

[스프링MVC 36] 스프링 MVC 기본 기능: HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form (tistory.com)

 

[스프링MVC 36] 스프링 MVC 기본 기능: HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form

[스프링 MVC 10] 서블릿: HTTP 요청 데이터 (tistory.com) [스프링 MVC 10] 서블릿: HTTP 요청 데이터 HTTP 요청 데이터를 어떻게 조회하는지 알아보자! HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터

joly156.tistory.com

 

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


  • @RequestParam
    • 파라미터 이름으로 바인딩
    • @RequestParam name(value) 속성이 파라미터 이름으로 사용
    • @RequestParam("username") String membername      →  request.getParameter("username")
@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(
        @RequestParam("username") String memberName,
        @RequestParam("age") int memberAge) {

    log.info("username={}, age={}", memberName, memberAge);
    return "ok";
}
  • @ResponseBody
    • View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력

 


  • HTTP 파라미터 이름 변수 이름과 같으면 @RequestParam("name") 생략 가능
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(
        @RequestParam String username,  //("username") 생략
        @RequestParam int age) {

    log.info("username={}, age={}", username, age);
    return "ok";
}

 


  • String , int , Integer 등의 단순 타입이면  @RequestParam 도 생략 가능
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
  • @RequestParam 애노테이션을 생략하면 스프링 MVC는 내부에서 required=false 를 적용

 


  • @RequestParam - required옵션
    • 파라미터 필수 여부 (기본값이 true )
@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
        @RequestParam(required = true) String username,
        @RequestParam(required = false) Integer age) {

    log.info("username={}, age={}", username, age);
    return "ok";
}
  • /request-param-required 요청
  • /request-param-required?age=20 요청
    • 필수인 username이 없으므로 400 예외 발생

 


  • /request-param?username= 요청
    • 파라미터 이름만 있고 값이 없는 경우 → 빈문자로 통과
  • @RequestParam(required = false) int age
    • /request-param-required?username=hello 요청
    • 기본형( int )에 null을 입력하는 것은 불가능 (500 예외 발생) → 따라서 null 을 받을 수 있는 Integer로 변경하거나, 또는 defaultValue 사용

 

 


  • @RequestParam - defaultValue 
    • 파라미터에 값이 없는 경우 defaultValue 를 사용하면 기본 값을 적용할 수 있다.
    • 이미 기본 값이 있기 때문에 required는 의미가 없다.
@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(
        @RequestParam(required = true, defaultValue = "guest") String username,
        @RequestParam(required = false, defaultValue = "-1") int age) {

    log.info("username={}, age={}", username, age);
    return "ok";
}
  • 빈 문자의 경우에도 defaultValue로 설정한 기본 값이 적용된다.
    • /request-param-default?username=

 

 


  • 파라미터를 Map, MultiValueMap으로 조회할 수 있다.
@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";
}
  • @RequestParam Map 
    • Map(key=value)
  • @RequestParam MultiValueMap
    • MultiValueMap(key=[value1, value2, ...] 
    • ex) (key=userIds, value=[id1, id2])
  • 파라미터의 값이 1개가 확실하면 Map을 사용해도 되지만, 그렇지 않다면(파라미터의 값이 여러개라면) MultiValueMap 을 사용

 


 

728x90
반응형