녕의 학습 기록

[Spring MVC 1] 스프링 MVC-기능 (2) 본문

Dev/Spring

[Spring MVC 1] 스프링 MVC-기능 (2)

kjyyjk 2023. 2. 2. 17:05

 학습 내용 

스프링 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 방식은 모두 쿼리 파라미터 형식 ! )

 

 

* 요청 쿼리 파라미터 조회

 

request.getParameter를 이용한 단순한 조회

 

@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 !

 

username 파라미터가 없어 400예외 터짐

 

 

@RequestParam(required = true, defaultValue = "guest") String username

defaultValue 속성을 설정하게 되면 파라미터가 들어오지 않았을 때(default) 설정한 값으로 대신한다.

defaultValue 설정이 되어있기 때문에 여기서 required 속성은 무의미하다.

 

 

파라미터를 Map 형식으로 조회

만약 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 요청 조회 및 응답

 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com