[Spring MVC] #4 기본 기능 (2) HTTP 요청 파라미터

Jaeyoo (유재형)·2022년 2월 14일
0

SpringMVC

목록 보기
10/12
post-thumbnail

HTTP 요청 데이터를 조회하는 방법을 알아보자


HTTP 요청 데이터


클라이언트에서 서버로 요청 데이터를 보낼때 3가지 방법이 있다.

GET - 쿼리 파라미터

  • 메시지 바디없이 UR의 쿼리 파라미터에 데이터를 포함해서 전달
  • /url?username=jayoo&age=27 이런식으로 전달
  • 검색, 필터, 페이징에서 많이 사용한다.

POST - HTML Form

  • content-type: application/x-www-form-urlencoded
  • 메시지 바디에 쿼리 파라미터 형식으로 전달 username=jayoo&age=27
  • HTML Form 사용

HTTP message body에 데이터 담아서 요청

  • API 에서 주로 사용 JSON, XML
  • 주로 JSON 사용

요청 파라미터 조회


GET 쿼리 파라미터 전송과 POST HTML Form 전송 둘다 같은 형식이므로 동일하게 조회할수있다.
요청 파라미터 조회하고한다. 조회 방식에는 여러가지가 있는데

1. request.getParameter()

: HttpServletRequest가 제공하는 방식

@RequestMapping("/request-param-v1")
public void requestParamV1(HttpServletRequest request, HttpServletResponseresponse) throws IOException {
          String username = request.getParameter("username");
}
     

2. @RequestParam

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

@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV2( @RequestParam("username") String memberName ) {
	log.info("username={}", memberName);
    return "ok"
}
  • 파라미터 이름으로 바인딩한다.
  • @RequestParam("username") String memberName == request.getParameter("username")
  • 만약 파라미터 이름과 변수 이름이 같으면 ("") 부분 생략 가능
    • @RequestParam("username") String userName == @RequestParam String userName
    • 변수의 타입이 String, int 같은 단순 타입이면 @RequestParam 도 생략 가능하다. (너무 생략해도 과하긴함)
  • @RequestParam(required = true) String username 이렇게 필수 여부도 선택할 수 있다.

파라미터를 Map으로도 조회가능하다.

@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";
}

3. @ModelAttribute

: 요청 파라미터를 받아서 필요한 객체에 담는다.


  @ResponseBody
  @RequestMapping("/model-attribute-v1")
  public String modelAttributeV1(@ModelAttribute HelloData helloData) {
      log.info("username={}, age={}", helloData.getUsername(),
  helloData.getAge());
      return "ok";
  }
  • HelloData 객체가 생성되고, 요청 파라미터 값이 모두 들어간다.
  • @ModelAttribute 도 생략 가능하나 @RequestParam 과 헷갈릴수있다.

실행 순서

  1. HelloData 객체 생성
  2. 요청 파라미터의 이름으로 HelloData 의 프로퍼티 찾는다. 해당 프로퍼티의 sette로 파라미터값 바인딩 한다.
profile
기록과 반복

0개의 댓글