Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

HTTP 요청 파라미터 - @RequestParam 본문

인프런/[인프런] 스프링 MVC 1

HTTP 요청 파라미터 - @RequestParam

Seung__ 2021. 9. 14. 21:40

1. @RequestParam


  • @RequestParam을 사용하면 paramter를 쉽게 조회가 가능
    • @RequestParam("username") String memberName
    • = request.getParameter("username")
  • @ResponseBody
    • @Controller의 경우 String을 반환하면 해당 String으로 View를 찾는다.
    • 하지만 @ResponseBody를 적용하면 return 값을 메시지 바디에 넣는다.
@Slf4j
@Controller
public class RequestParamController {

    @ResponseBody //얘를 넣으면 응답메시지에 값넣어서 return, @Controller여도 String으로 view찾지 않음.
    @RequestMapping("/request-param-v2")
    public String requestParamV2(@RequestParam("username") String memberName,
                               @RequestParam("age") int memberAge){

        log.info("mamberName = {}, memberAge= {}", memberName, memberAge);

        return "ok";

    }
}

 

2. 생략 가능 ㅋㅋ


  • 요청 Paramter 명과 변수명이 같으면 @RequestParam("~~") 생략 가능
    @ResponseBody
    @RequestMapping("/request-param-v3")
    public String requestParamV3(@RequestParam String username,
                                 @RequestParam int age){

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

        return "ok";

    }
  • 이렇게도 생략 가능
    • 요청 parameter명과 변수명이 같고
    • String , int , Integer 등의 단순 타입은
    • @RequestParam자체를 생략 가능 ㅋㅋㅋㅋㅋ
    @ResponseBody
    @RequestMapping("/request-param-v4")
    public String requestParamV4(String username,
                                 int age){

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

        return "ok";

    }

 

 

 

3. requestParamRequired , 필수 파라미터 여부


  • @RequestParam의 required 옵션
  • required = true : 필수 값  
  • required = false : 없어도 됨 ㅋㅋ
    @ResponseBody
    @RequestMapping("/request-param-required")
    public String requestParamRequired(@RequestParam(value = "username", required = true) String username,
                                 @RequestParam(value = "age", required = false) int age){

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

        return "ok";

    }
  • 어? 근데 age가 required=false이면 null도 들어가야 하는데..?
    • int의 경우 Integer로 바꿔야함 ㅋㅋㅋㅋ
    • Integer는 객체임.  null 가능
    @ResponseBody
    @RequestMapping("/request-param-required")
    public String requestParamRequired(@RequestParam(value = "username", required = true) String username,
                                 @RequestParam(value = "age", required = false) Integer age){

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

        return "ok";

    }

 

4. null vs ""


  • 위의 예제에 대해서 username을 아예 전달을 안하는 경우
  • username=""로 전달하는 경우 뭐가 다름?
  • username이 null  인경우
    • http://localhost:8080/request-param-required
    • 400에러 발생.

2021-09-14 21:24:48.983  WARN 19520 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException\
: Required request parameter 'username' for method parameter type String is not present]
  • username="" ->빈문자
    • http://localhost:8080/request-param-required?username=
    • 빈문자가 전달되기 때문에 통과함. -> 결국 값이 들어온거임 ㅋㅋㅋ
2021-09-14 21:27:00.374  INFO 19520 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = , age= null

 

 

5. DefaultValue


  • 값이 없을 경우 사용할 기본 값.
    @ResponseBody
    @RequestMapping("/request-param-default")
    public String requestParamDefault(@RequestParam(value = "username", required = true, defaultValue = "guest") String username,
                                       @RequestParam(value = "age", required = false, defaultValue = "-100") int age){

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

        return "ok";

    }
  • username와 age를 전달하지 말아보자.
    • http://localhost:8080/request-param-default
    • default로 지정한 값이 들어감 ㅋㅋㅋ
    • required가 무의미해짐.
2021-09-14 21:31:39.653  INFO 39820 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = guest, age= -100
  • username=""로 전달한 경우? 즉 빈문자를 전달하는 경우?
    • http://localhost:8080/request-param-default?username=
    • 빈문자도 defulat값으로 입력된다 ㅋㅋㅋ
2021-09-14 21:31:39.653  INFO 39820 --- [nio-8080-exec-3] h.s.b.request.RequestParamController
: username = guest, age= -100

 

 

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


  • 모든 요청 파라미터 받기
  • @RequestParam Map<String, Object> paramMap
  • 파라미터 꺼내기 -> paramMap.get(key)
    @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";

    }
  • MultiValueMap으로도 조회가 가능.
    • 해당 파라미터의 값이 1개가 아닐거 같으면.. MultiValueMap사용 ㅋㅋ
    • 보통 1개씀..ㅋㅋ
MultiValueMap(key=[value1, value2, ...] ex) (key=userIds, value=[id1, id2])

 

7. GitHub : 210914 @RequestParam


 

GitHub - bsh6463/MVC2

Contribute to bsh6463/MVC2 development by creating an account on GitHub.

github.com

 

Comments