pebblepark
개발계발
pebblepark
전체 방문자
오늘
어제
  • 분류 전체보기 (24)
    • Frontend (7)
    • Backend (7)
    • 인프라 (1)
    • CS (0)
      • Design Pattern (0)
    • 정리용 (9)
    • 회고 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SpringMVC
  • vite
  • 스프링 빈
  • springboot
  • spring
  • Github Pages
  • javascript
  • 스프링 의존관계
  • react-query
  • redux
  • wsl
  • CORS
  • 호이스팅
  • Docker
  • Git
  • Context API
  • useLayoutEffect
  • github
  • typescript
  • TDZ
  • ERR_UNSAFE_PORT
  • 무한스크롤
  • hoisting
  • react
  • 스프링 컨테이너
  • @ModelAttribute
  • 리액트쿼리
  • React Query
  • debounce
  • 스프링

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
pebblepark

개발계발

[Spring] HTTP 요청 파라미터 사용 - @RequestParam과 @ModelAttribue
Backend

[Spring] HTTP 요청 파라미터 사용 - @RequestParam과 @ModelAttribue

2022. 1. 18. 23:51

로그 레벨 설정
application.properties

# 전체 로그 레벨 설정(기본 info)
logging.level.root=info

#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug



@RequestParam

  • @RequestParam: 파라미터 이름으로 바인딩
  • @RequestParam의 name(value) 속성이 파라미터 이름으로 사용
  • @RequestParam("username") String memberName
    • String memberName = request.getParameter("username")
  • 파라미터 이름이 변수 이름과 같으면 name 속성 생략 가능
  • String, int, Integer 등의 단순 타입이면 @RequestParam 생략 가능
  • 어노테이션 생략시 내부에서 required=false 적용, 어노테이션 적용시 required=true가 기본값
  • 파라미터 값이 여러개라면 MultiValueMap 사용
  • @RequestParam MultiValueMap<String, Object> paramMap
  • required=true인 경우, 해당 파라미터를 너기지 않은 경우 400 예외 발생
  • 파라미터 이름만 있고 값이 없는 경우는 빈문자로 통과함
  • 기본형(primitive)에 null 입력시 500 예외 발생
  • @RequestParam(required=false) int age에 null 사용 불가 -> Integer로 변경, defaultValue 사용
  • defaultValue는 빈 문자의 경우에도 적용됨
@ResponseBody
@RequestMapping("/request-param")
public String requestParam(
        @RequestParam(name = "username") String memberName,
        @RequestParam String username,
        @RequestParam(name ="age", defaultValue = "-1") int memberAge,
        Integer age,
        @RequestParam(required = true) boolean required,
        @RequestParam MultiValueMap<String, Object> paramMap) {

    log.info("memberName={}", memberName);
    log.info("username={}", username);
    log.info("memberAge={}", memberAge);
    log.info("age={}", age);
    log.info("required={}", required);
    log.info("paramMap={}", paramMap);

    return "ok";
}

 

실행결과
http://localhost:8080/request-param?username=hello&required=true&test=123&test=456

2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : memberName=hello
2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : username=hello
2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : memberAge=-1
2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : age=null
2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : required=true
2022-01-18 23:30:30.903  INFO 12236 --- [nio-8080-exec-8] h.s.w.s.basic.RequestHeaderController    : paramMap={username=[hello], required=[true], test=[123, 456]}



@ModelAttribute

  • 요청 파라미터의 이름으로 객체의 프로퍼티를 찾아 해당 프로퍼티의 setter를 호출 -> 파라미터의 값 바인딩
  • 숫자가 들어가야할 부분에 문자를 넣으면 BindException 발생
  • @ModelAttribute는 생략 가능
  • @RequestParam도 생략 가능하므로 혼란이 발생할 수 있음
  • String, int, Integer 같은 단순 타입은 @RequestParam으로 매핑
  • 나머지 = @ModelAttribute(argument resolver로 지정해둔 타입 외)
@Data
public class HelloData {
    private String username;
    private int age;
}

 

@ResponseBody
@RequestMapping("/model-attribute")
public String modeAttribute(@ModelAttribute HelloData helloData) {
    log.info("helloData={}", helloData);
    return "ok";
}

 

실행결과
http://localhost:8080/model-attribute?username=hello&age=24

2022-01-18 23:46:12.437  INFO 15100 --- [nio-8080-exec-4] h.s.w.s.basic.RequestHeaderController    : helloData=HelloData(username=hello, age=24)




저작자표시 (새창열림)

'Backend' 카테고리의 다른 글

[Spring] 다양한 의존관계 주입 방법  (0) 2022.01.29
[Spring] 스프링 컨테이너와 스프링 빈  (0) 2022.01.25
[Spring] MVC 패턴  (0) 2022.01.16
[Spring] MVC 패턴의 등장  (0) 2022.01.15
[Spring] HttpServletRequest와 HttpServletResponse 다루기  (0) 2022.01.11
    'Backend' 카테고리의 다른 글
    • [Spring] 다양한 의존관계 주입 방법
    • [Spring] 스프링 컨테이너와 스프링 빈
    • [Spring] MVC 패턴
    • [Spring] MVC 패턴의 등장
    pebblepark
    pebblepark
    프론트엔드 개발자입니다. 피드백은 언제나 환영입니다:)

    티스토리툴바