HTTP 요청 파라미터 - @RequestParam

SHByun·2023년 1월 25일
0

강의 chap6-7


HTTP 요청 파라미터 - @RequestParam

1. @RequestParam

  • 요청 파라미터를 쉽게 사용할 수 있다.
@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에 직접 해당 내용을 입력할 수 있다.(여기서는 “ok”)

2. 생략 버전

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

  • 요청 파라미터 변수명을 같게 하면 @RequestParam() 안에 요청 파라미터를 생략할 수 있다.
@ResponseBody
@RequestMapping("/request-param-v4")
public String requestParamV4(String username, int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
  • 이 경우 @RequestParam도 생략할 수 있다. 단 String, int, Integer 등의 단순 타입이여야 한다.
  • 하지만 애노테이션 생략은 명확하지 않아서 생략하지 않는 것이 좋다.

3. 파라미터 필수 여부(requestParamRequired)

@ResponseBody
@RequestMapping("/request-param-required")
public String requestParamRequired(
        @RequestParam(required = true) String username,
        @RequestParam(required = false) int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
  • Default : true
  • Username은 꼭 있어야 하고 age는 없어도 된다.
  • True : 꼭 필요, False : 필수는 아니다.
  • true인데 없으면 400 예외가 난다.
  • 지금 이 예제에서 username만 입력하고 age를 입력하지 않는 경우 500 예외가 발생한다.
    -> 요청 파라미터 값이 없으면 null을 주게 된다.
    -> int는 null을 대입할 수가 없다.
    -> 사용하기 위해서는 Integer를 사용해야 한다.(Integer에는 null을 넣을 수 있다.)
    -> 또는 defaultValue를 사용한다.
  • 주의(username = )이라고 요청이 왔을 때
    -> Null과 “”(빈 문자)는 다르다.

4. 기본값 적용(requestParamDefault)

@ResponseBody
@RequestMapping("/request-param-default")
public String requestParamDefault(
        @RequestParam(defaultValue = "guest") String username,
        @RequestParam(defaultValue = "-1") int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}
  • 값이 없으면 defaultValue로 설정한 값이 넘어온다.
  • defaultValue는 빈 문자의 경우에도 설정한 기본 값이 적용된다.
  • defaultValue가 있으면 required는 사용할 필요가 없다.

5. 파라미터를 Map으로 조회하기(requestParamMap)

@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을 통해 받아 올 수 있다.
    -> MultiValueMap(key=[value1, value2, ...] ex) (key=userIds, value=[id1, id2])
  • 파라미터의 값이 1개가 확실하다면 Map 을 사용해도 되지만, 그렇지 않다면 MultiValueMap 을 사용하는 것이 좋다.

출처

인프런 강의 - 김영한
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

profile
안녕하세요

0개의 댓글