♪ 학습 내용
스프링 MVC - HTTP 요청 파라미터 조회
* HTTP 요청 헤더 조회
- HttpMethod => HTTP 메서드를 조회한다. ex) GET , PUT ,,, 등
- Locale => Locale정보를 조회한다. ex) ko_KR , en_US ,,, 등
@RequestHeader
@RequestHeader MultiValueMap<String, String> headerMap
모든 HTTP 헤더를 MultiValueMap형식으로 조회
MultiValueMap은 Map과 유사하며, 하나의 키에 여러 값을 받을 수 있다 !
따라서 MultiValueMap에서 여러 값이 저장된 키 하나를 조회하면 해당 값들이 속한 List 배열로 반환한다.
@RequestHeader("host") String host
특정 HTTP 헤더를 조회 ! 여기선 host 헤더 ( host 헤더는 무조건 있다 )
@CookieValue(value= "myCookie", required = false) String cookie
특정 쿠키를 조회한다.
* HTTP 요청 데이터 전달 방식
HTTP 요청 시 데이터 전달 방식은 주로 다음 3가지 방식을 사용한다.
GET - 요청 쿼리 파라미터 / Post - HTML Form / HTTP Message Body
(Get 쿼리파라미터 와 HTML Form 방식은 모두 쿼리 파라미터 형식 ! )
* 요청 쿼리 파라미터 조회
@ResponseBody
현재 컨트롤러는 RestController가 아닌, 일반 Controller.
따라서 반환되는 문자열은 View 이름으로 인식된다.
하지만 이 @RequestBody 애노테이션을 사용하면 마치 RestController인 것 처럼,
View 조회를 무시하고 HTTP Message Body에 내용이 담긴다.
결국은 화면에 출력됨 !
@RequestParam
//파라미터의 이름으로 바인딩
//String memberName = request.getParameter("username");과 같다.
@RequestParam("username") String memberName
//HTTP 파라미터의 이름이 변수의 이름과 같으면 (username)
//다음과 같이 생략가능
@RequestParam String username
//추가로 변수의 타입이 String, int 같이 단순 타입이면 애노테이션마저 생략 가능
String username
@RequestParam(required = true) String username
@RequestParam 애노테이션의 required 속성 값이 true 이면 해당 파라미터의 값이 무조건 들어와야한다.
만얀 들어오지 않으면 400예외.
required = false 이면 안들어와도 상관 x !
@RequestParam(required = true, defaultValue = "guest") String username
defaultValue 속성을 설정하게 되면 파라미터가 들어오지 않았을 때(default) 설정한 값으로 대신한다.
defaultValue 설정이 되어있기 때문에 여기서 required 속성은 무의미하다.
만약 key 하나에 값이 여러개라면 MultiValueMap을 사용
(웬만하면 쿼리 파라미터 key에는 값이 하나씩임)
@Data
@Data 는 롬복의 애노테이션으로,
@Getter / Setter / ToString / EqualsAndHashCode / RequiredArgsConstructor 를 자동 적용해준다.
(@ModelAttribute HelloData helloData)
@ModelAttribute
기존에는 new 연산자로 객체를 생성해 직접 요청 파라미터의 값을 넣어주었지만,
스프링은 @ModelAttribute 애노테이션을 통해 자동으로 처리해준다.
애노테이션을 사용하면 내부적으로 HelloData 객체를 생성하여 요청 파라미터의 이름으로
HelloData 객체의 프로퍼티를 찾고, 매칭되는 값을 setter로 넣어준다.
나도 사용하자마자 느꼈지만 매우 편리하다...
(HelloData helloData)
근데 여기서 또 애노테이션을 생략해서 사용할 수도 있다.
아까 @RequestParam도 생략이 가능했으므로 만약 애노테이션 생략하면 뭔지 모르지 않을까?
놉. 규칙이 있다.
규칙 ---> ( String, int 같이 단순 타입 = @RequestParam 생략 / 나머지 = @ModelAttribute 생략된 것으로 간주 )
♪ 다음 학습 내용
스프링 MVC - HTTP 요청 조회 및 응답
'Dev > Spring' 카테고리의 다른 글
[Spring MVC 1] 스프링 MVC-기능 (4) (0) | 2023.02.08 |
---|---|
[Spring MVC 1] 스프링 MVC-기능 (3) (0) | 2023.02.07 |
[Spring MVC 1] 스프링 MVC-기능 (1) (0) | 2023.02.01 |
[Spring MVC 1] 스프링 MVC-구조 (2) (0) | 2023.01.31 |
[Spring MVC 1] 스프링 MVC-구조 (1) (0) | 2023.01.30 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!