오봉이와 함께하는 개발 블로그

스프링 MVC 1 - HTTP 요청 파라미터(@RequestParam) 본문

BE/Spring

스프링 MVC 1 - HTTP 요청 파라미터(@RequestParam)

오봉봉이 2022. 8. 13. 22:40
728x90

HTTP 요청 파라미터 - @RequestParam

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

requestParamV2

@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2(@RequestParam("username") String memberName,
                            @RequestParam("age") int memberAge) {
    log.info("memberName = {}, memberAge = {}", memberName, memberAge);
    return "ok";
}
  • @RequestParam : 파라미터 이름으로 바인딩
  • @ResponseBody : 반환 값을 String으로 했을 때 View 조회를 무시하고, HTTP message body에 직접 해당 내용 입력

requestParamV3

@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(@RequestParam String username,
                            @RequestParam int age) {
    log.info("username = {}, age = {}", username, age);
    return "ok";
}

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

requestParamV4

@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}

String , int , Integer 등의 단순 타입이면 @RequestParam도 생략 가능

  • 주의
    • @RequestParam을 생략하면 스프링 MVC는 내부에서 required=false를 적용한다.

파라미터 필수 여부 - requestParamRequired

/**
* @RequestParam.required
* /request-param-required -> username이 없으므로 예외
* 주의!
* /request-param-required?username= -> 빈문자로 통과
* 주의!
* /request-param-required
* int age -> null을 int에 입력하는 것은 불가능, 따라서 Integer 변경해야 함
* (또는 다음에 나오는defaultValue 사용)
* */
@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";
}
  • @RequestParam.required
    • 파라미터 필수 여부
    • 기본값은 파라미터 필수(true)
      • 없으면 오류가 생긴다.
    • false로 하면 없어도 오류가 생기지 않는다.
  • /request-param
    • username 파라미터 자체가 존재하지 않기 때문에 400 예외 발생
  • /request-param?username=
    • 파라미터는 있기 때문에 변수에 빈문자가 들어감
주의 - 파라미터 이름만 사용

/request-param?username=
파라미터 이름만 있고 값이 없는 경우 -> 빈문자로 통과한다.

주의 - 기본형(primitive)에 null 입력

@RequestParam(required = false) int age
/request-param으로 요청

null을 int에 입력하는 것은 불가능하다. (500 에러 발생)
따라서 null을 받을 수 있는 Integer로 변경하거나 defaultValue를 사용하자.

기본 값 적용 - requestParamDefault

/**
* @RequestParam
* - defaultValue 사용
*
* 참고: 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") int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}

파라미터에 값이 없는 경우 defaultValue를 사용하면 기본 값을 적용할 수 있다.
이미 기본 값이 있기 때문에 required 는 의미가 없다.

defaultValue는 빈 문자("")의 경우에도 설정한 기본 값이 적용된다.
/request-param-default?username=

파라미터를 Map으로 조회하기 - requestParamMap

/**
* @RequestParam Map, MultiValueMap
* Map(key=value)
* MultiValueMap(key=[value1, value2, ...]) ex) (key=userIds, value=[id1, id2])
*/
@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";
}

파라미터를 Map, MultiValueMap으로 조회할 수 있다.

  • @RequestParam Map<String, Object>
    • Map(key=value)
  • @RequestParam MultiValueMap
    • MultiValueMap(key=[value1, value2, ...]
      • ex) (key=userIds, value=[id1, id2])

파라미터의 값이 1개가 확실하다면 Map을 사용해도 되지만, 그렇지 않다면 MultiValueMap을 사용하자.

출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
Comments