본문 바로가기

Spring/Spring

[Spring] HTTP 요청 파라미터 - 쿼리 파라미터

반응형

클라이언트에서 서버로 요청 데이터를 전달할 때 쓰는 방법 

1. GET - 쿼리 파라미터

  • URL의 쿼리 파라미터를 이용하는 방식으로 메시지 바디없이 URL의 쿼리 파라미터에 데이터를 포함하여 전달한다.
  • 검색, 필터, 페이징 등에서 많이 사용한다.

2. POST - HTML Form

  • content-type : application/x-www.form.urlencoded
  • 메시지 바디에 쿼리 파라미터 형식으로 전달한다.
  • 회원가입, 상품 주문, HTML Form에 사용한다.

3. HTTP message body에 데이터를 직접 담아서 요청

  • HTTP API에서 주로 사용하며 JSON 방식을 주로 사용한다.

 


 

1. 요청 파라미터 - 쿼리 파라미터

 @RequestMapping("/request-param-v1")
    public void requestParamV1 (HttpServletRequest request, HttpServletResponse response) throws IOException {

        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));
        log.info("username={}, age={}", username, age);
        response.getWriter().write("ok");
    }

@RequestMapping 애너테이션으로 요청 URL을 매핑해준다.

쿼리 파라미터 형식은 getParameter가 핵심입니다. 말그대로 URL의 쿼리 파라미터에서 내가 필요한 정보를 가져오는 것이기 때문에 요청에서 username이라는 파라미터와 age라는 파라미터를 가져온다 라는 뜻으로 이해하면 됩니다.

 @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에 대해서 먼저 설명드리겠습니다.

@ResponseBody 애너테이션은 말 그대로 Http 메시지 바디에 바로 반응을 시킨다는 것입니다. 

일반적으로 String 메서드에 return값이 달려있으면 스프링은 ok라는 뷰가 있는지 조회합니다. 하지만 우리는 뷰를 조회하는 것이 아니라 HTTP 메시지 바디에 문자를 입력함으로써 정상적으로 실행이 되었다는 것을 확인하는 게 목적이기 때문에 @ResponseBody를 넣어서 뷰 조회를 하지 않게 막아줄 수 있습니다.

@RequestParam 애너테이션은 v1에서 했던 String username = request.getParameter("username")과 같은 역할을 해줍니다. 애너테이션을 활용하면 간결한 코드를 만들 수 있습니다.

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

 v2와 동일하게 @RequestParam을 이용했지만 HTTP 파라미터 이름과 변수 이름이 같으면 더 간결하게 할 수 있습니다.

 

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

String, int, Integer 등의 단순 타입일 경우 @RequestParam 생략이 가능합니다.

 

출처 : 인프런 - 스프링 MVC 1편 (김영한)

반응형