Spring MVC - 요청 파라미터, @RequestParam, @ModelAttribute
2021. 4. 7. 16:54ㆍSPRING/SPRING MVC
요청 파라미터
Http 통신에서 요청 파라미터가 넘어오는 경우가 두 가지가 있다.
1. Get 메서드로 쿼리 파라미터가 넘어오는 경우
예) www.naver.com/exp?username=yoon&age=33
2. Html의 Form태그를 통해 Http 메시지의 바디부분으로 들어오는 경우
쿼리 파라미터와 양식이 같다. 다만 URI뒤에 붙는게 아닌, http 메시지 바디에 들어가게 된다.
요청 파라미터 조회
HttpServletRequest
- 서블릿처럼 HttpServletRequest를 인자로 받아 request.getParameter()를 이용해 파라미터를 조회할 수 있다.
@RequestParam
- HttpServletRequest를 사용하지 않고 파라미터를 조회할 수 있다.
- 예) @RequestParam("username") String memberName
- 파라미터 이름과 매개변수 이름이 같으면 생략 가능하다.
- 예) @RequestParam String username
- String, int, Integer와 같은 단순 타입이면 @RequestParam도 생략 가능하다
- 예) String username
- required 속성으로 필수 파라미터를 지정할 수 있다. 디폴트는 true.
- 클라이언트에서 해당 파라미터를 보내지 않으면 400 응답코드로 리턴된다.
- 빈 문자열을 보내면 400 에러 나지 않고 빈문자열을 받는다.
- 매개변수를 int로 설정한 경우 null이 들어갈 수 없기때문에 null이 오면 바인딩 에러가 난다.
- 이럴때는 Integer로 변경하던가 defaultValue 속성을 지정해준다.
- defaultValue 속성을 지정해주면 required 속성이 필요없어진다.
@ModelAttribute
- 파라미터를 DTO로 받을 수 있다.
- 예) @ModelAttribute User user
- @ModelAttribute는 내부적으로 setter를 찾는다. 따라서 setter가 있어야한다.
- @ModelAttribute는 DTO이름이 아닌, DTO안의 프로퍼티(변수) 이름으로 매핑된다.
- @ModelAttribute는 생략 가능하다.
- 이 때, 스프링은 단순 타입이면 @RequestParam으로 인식하고 단순 타입이 아니면서 argument resolver로 지정해둔 타입이 아닌 경우 @ModelAttribute로 인식한다.
- 속성으로 value 스트링값을 넣을 수 있는데, 여기에 들어간 값으로 Model에 해당 파라미터를 넣어주는 기능도 있다.
- value 속성을 생략하면 파라미터 타입의 앞 첫글자만 소문자로 변경한 이름으로 Model에 넘어가게 된다.
- 예) Item -> item
'SPRING > SPRING MVC' 카테고리의 다른 글
Spring MVC - 정적 리소스, 뷰 템플릿 경로 (0) | 2021.04.08 |
---|---|
Spring MVC - Http 메시지 바디 요청, 응답 파싱 (0) | 2021.04.08 |
Spring MVC - 컨트롤러 파라미터 타입 종류, 리턴 타입 종류 매뉴얼 (0) | 2021.04.07 |
Spring MVC - 요청 헤더 조회 @RequestHeader, @CookieValue (0) | 2021.04.07 |
Spring MVC - 요청 매핑, @RequestMapping, @PathVariable (0) | 2021.04.06 |