jiisoo
지수로그
jiisoo
전체 방문자
오늘
어제

블로그 메뉴

  • home
  • Github
  • 알고리즘 문제풀이 저장소
  • 분류 전체보기 (80)
    • Java (1)
    • Spring (30)
    • JPA (15)
    • cs (8)
      • 디자인패턴 (1)
      • 네트워크 (5)
      • Database (1)
      • 운영체제 (1)
    • algorithm (18)
      • 알고리즘 & 자료구조 이론 (12)
      • 알고리즘 풀이 (6)
    • 면접 준비 (0)
    • 회고 (5)
      • ATDD (4)
      • 학습테스트로 배우는 spring 2기 (1)
      • 프로젝트 (0)

인기 글

최근 댓글

최근 글

태그

티스토리

hELLO · Designed By 정상우.
jiisoo

지수로그

Spring

[spring] 스프링 MVC - HTTP 요청 파라미터

2023. 3. 15. 17:01
  • 서블릿에서 학습했던 HTTP 요청 데이터를 조회하는 방법은 예전 포스팅에서 다루었었다.
    • 서블릿으로 조회하는 HTTP 요청 데이터
  • 이번 포스팅에서는 서블릿으로 조회하는 방법이 아닌, 스프링으로 조회하는 방법에 대해서 알아보자.

 

💡 HTTP 요청 파라미터 - @RequestParam

 

@RequestParam 

  • 스프링이 제공하는 @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";
}
  • @RequestParam은  파라미터 이름으로 바인딩하여 사용한다.
    • @RequestParam("username") String memberName => request.getParameter("username")
  • 만약 HTTP 파라미터 이름이 변수 이름과 같다면 @RequestParam(name="xx") 생략 가능
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV3(
        @RequestParam String username,
        @RequestParam int age) {
    log.info("username={}, age={}", username, age);
    return "ok";
}

 

❗️@ResponseBody 란?

  • View 조회를 무시한다.
  • HTTP message body 에 직접 해당 내용 입력

 

 

✔︎ 파라미터 필수 여부 

  • @RequestParam 의 속성 중 required 를 사용하여 해당 파라미터의 필수 여부를 설정할 수 있다.
@ResponseBody
    @RequestMapping("/request-param-required")
    public String requestParamRequired(@RequestParam(required = true) String username,
                                 @RequestParam(required = false) Integer age) {

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

 

  • 기본값은 파라미터 필수(true)이다.
  • 해당 파라미터를 공백으로 전송하면 빈문자로 통과된다.
  • required 가 true 일 때 파라미터를 보내주지 않을 경우 400에러가 발생한다.
  • 원시타입으로 null 이 들어갈 수 없기 대문에 wrapper 타입을 사용해야 한다.

 

 

✔︎ 기본값을 설정하기 (defaultValue) 

@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";
}
  • 파라미터가 없는 경우 기본값으로 설정된 값이 적용된다.
  • 빈 문자("") 일 경우 설정한 기본 값이 적용된다.

 

✔︎ 파라미터를 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";
}
  • 파라미터의 값이 1개면 Map 을 사용하고, 그렇지 않은 경우 MultiValueMap 을 사용하자.

 

 

💡 HTTP 요청 파라미터 - @ModelAttribute

@ModelAttribute 

  • 사용자가 요청시 전달하는 값을 오브젝트 형태로 매핑해주는 어노테이션이다.
  • 요청 파라미터를 바인딩 받을 객체가 필요하다.
@Data
public class HelloData {
    private String username;
    private int age;
}
@ResponseBody
@RequestMapping("/model-attribute-v1")
public String modelAttributeV1(@ModelAttribute HelloData helloData) {
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    return "ok";
}
  • 스프링 MVC 는 @ModelAttribute 가 있을 경우
    • HelloData 객체를 생성하고 
    • 요청 파라미터의 이름으로 HelloData 객체의 프로퍼티를 찾고, 해당 프로퍼티의 setter를 호출해서 파라미터의 값을 입력(바인딩)한다.
      • 예) 파라미터의 이름이 username 일 경우 setUsername() 을 찾아 호출하면서 값 입력.
    • 생략이 가능하다.
 @ResponseBody
@RequestMapping("/model-attribute-v2")
public String modelAttributeV2(HelloData helloData) {
    log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    return "ok";
}

 

 

💡 정리

  • 만약 @ModelAttribute, @RequestParam 이 생략되어 있을 경우 스프링은 다음과 같이 규칙을 적용하여 해결한다.
    • String, int, Integer 같은 단순 타입 = @RequestParam
    • 나머지의 경우 = @ModelAttribute

 

 

 

<김영한 - '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술'을 참고하였습니다.>

 
 

'Spring' 카테고리의 다른 글

[spring] 스프링 MVC - HTTP 응답 데이터  (0) 2023.03.18
[spring] 스프링 MVC - HTTP 요청 메세지  (0) 2023.03.16
[spring] 스프링 MVC - 요청을 매핑하는 다양한 방법  (0) 2023.03.14
[spring] logging  (0) 2023.03.13
[spring] spring MVC 구조 이해 - dispatcherServlet  (0) 2023.03.12
    'Spring' 카테고리의 다른 글
    • [spring] 스프링 MVC - HTTP 응답 데이터
    • [spring] 스프링 MVC - HTTP 요청 메세지
    • [spring] 스프링 MVC - 요청을 매핑하는 다양한 방법
    • [spring] logging
    jiisoo
    jiisoo

    티스토리툴바