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

RequestParam

스프링에서 요청 파라미터를 전달하는 방법에는 여러가지가 있다.

방법 1 - HttpServletRequest, HttpServletResponse 객체 전달

  • http 서블릿 객체를 통째로 전달해서 request.getParameter를 이용한다.
public void requestParamV1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        log.info("username={}, age={}", username, age);
        response.getWriter().write("ok");
    }
    

방법 2 - @RequestParam 애노테이션 사용

@RequestParam의 value값이 변수 명과 다를 경우

  • request 객체의 username이라는 파라미터를 memberName으로 가져와서 사용할 수 있다.
@ResponseBody
    @RequestMapping("/request-param-v2")
    public String requestParamV2(
            @RequestParam("username") String memberName,
            @RequestParam("age") int memberAge

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

@Request의 name값을 별도로 기입하지 않았을 경우

  • 별도로 기입하지 않을 경우 아래와 같이 사용가능, 단 변수명이 파라미터의 이름과 같아야한다.
    @ResponseBody
    @RequestMapping("/request-param-v3")
    public String requestParamV3(
    @RequestParam String username,
    @RequestParam int age

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

애노테이션을 사용하지 않고 일반 매개변수만 전달 했을 경우

  • @RequestParam을 생략하더라도 변수명이 request의 파라미터의 이름과 일치하다면 가져와서 사용 가능하다.
  • String, int, Integer 등의 단순타입이어야 한다.
@ResponseBody
    @RequestMapping("/request-param-v4")
    public String requestParamV4(
            String username,
            int age

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

Map을 이용해 전달

  • Map<String,Object> paramMap으로 전달해 꺼내서 사용가능하다.
  @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";
    }

Require

  • required 설정으로 파라미터가 필수인지 아닌지 설정한다. (기본값 true)

  • null과 "" (빈 문자열)은 다르다.
    "/request-param?username="와 같은 요청은 username에 빈문자열이 전달된다. (오류 발생X)
    "/request-param?age=12" 와 같은 경우에는 아래의 코드에서 username이 null로 전달되므로 에러(400)가 발생한다.

@ResponseBody
    @RequestMapping("/request-param-required")
    public String requestParamRequired(
           @RequestParam(required = true, defaultValue = "guest") String username,
           @RequestParam(required = false, defaultValue ="-1") int age

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

좋은 웹페이지 즐겨찾기