You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다
RequestParamController : requestParamV2
@ResponseBody// return 하는 문자를 그대로 HTTP 응답 메세지에 넣어서 반환함 (RestController와 같은 효과)@RequestMapping("/request-param-v2")
publicStringrequestParamV2(
@RequestParam("username") StringmemberName,
@RequestParam("age") intmemberAge){
log.info("username={}, age={}", memberName, memberAge);
return"ok";
}
요청 파라미터를 조회하는 기능과 관계 없음 @RequestParam X, @ModelAttribute X
HttpEntity는 응답에도 사용 가능
메시지 바디 정보 직접 반환
헤더 정보 포함 가능
view 조회X
HttpEntity 를 상속받은 다음 객체들도 같은 기능을 제공
RequestEntity
HttpMethod, url 정보가 추가, 요청에서 사용
ResponseEntity
HTTP 상태 코드 설정 가능, 응답에서 사용
return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED)
참고
스프링MVC 내부에서 HTTP 메시지 바디를 읽어서 문자나 객체로 변환해서 전달해주는데, 이때 HTTP 메시지 컨버터(HttpMessageConverter)라는 기능을 사용
RequestBodyStringController : requestBodyStringV4
// 많이 사용하는 방법@ResponseBody@PostMapping("/request-body-string-v4")
publicStringrequestBodyStringV4(@RequestBodyStringmessageBody){
log.info("messageBody={}", messageBody);
return"ok";
}
@RequestBody
HTTP 메시지 바디 정보를 편리하게 조회할 수 있음
헤더 정보가 필요하면 HttpEntity를 사용하거나 @RequestHeader를 사용하면 됨
이렇게 메시지 바디를 직접 조회하는 기능은 요청 파라미터를 조회하는 @RequestParam, @ModelAttribute와는 전혀 관련 X
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
6_스프링 MVC - 기본 기능 (2)
HTTP 요청 - 기본, 헤더 조회
애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원
HTTP 헤더 정보를 조회하는 방법을 알아보자
RequestHeaderControllerHttpServletRequestHttpServletResponseHttpMethodLocale@RequestHeader MultiValueMap<String, String> headerMap@RequestHeader("host") String hostrequireddefaultValue@CookieValue(value="myCookie", requied=false) String cookierequireddefaultValue실행 결과

MultiValueMap
HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form
HTTP 요청 데이터 조회 - 개요
HTTP 요청 메세지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은 크게 3가지
/url?username=helo&age=20요청 파라미터 - 쿼리 파라미터, HTML Form
HttpServletRequest의request.getParameter()를 사용하면 다음 2가지 요청 파라미터를 조회할 수 있다GET, 쿼리 파라미터 전송
POST, HTML Form 전송
Spring으로 요청 파라미터 조회
RequestParamController: requestParamV1request.getParameter()HTTP 요청 파라미터 - @RequestParam
스프링이 제공하는
@RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다RequestParamController: requestParamV2@RequestParam@ResponseBody@RequestParam의
name(value)속성이 파라미터 이름으로 사용RequestParamController: requestParamV3HTTP 파라미터 이름이 변수 이름과 같으면
@RequestParam(name="xx")생략 가능RequestParamController: requestParamV4String, int, Integer등의 단순 타입이면@RequestParam도 생략 가능파라미터 필수 여부
RequestParamController: requstParamRequired@RequestParam.required/request-param-required요청username이 없어서 400 예외 발생주의! - 파라미터 이름만 사용
/request-param-required?username=주의! - 기본형(primitive)에 null 입력
/request-param요청@RequestParam(requied = false) int agenull을int에 입력하는 것은 불가능 (500 에러 발생). 따라서null을 받을 수 있는Integer로 변경하거나, 또는defaultValue사용기본 값 적용
RequestParamController: requesetParamDefaultdefaultValue를 사용하면 기본 값을 적용할 수 있다. 이미 기본 값이 있기 때문에required는 의미가 없다.defaultValue는 빈 문자의 경우에도 설정한 기본 값이 적용파라미터를 Map으로 조회하기
RequestParamController: requestParamMap@RequestParam MapMap(key=value)@RequestParam MultiValueMapMultiValueMap(key=[value1, value2, ...] ex) (key=userIds, value=[id1, id2])Map을 사용해도 되지만, 그렇지 않다면MultiValueMap을 사용HTTP 요청 파라미터 - @ModelAttribute
실제 개발을 하면 요청 파라미터를 받아, 필요한 객체를 만들고, 그 객체에 값을 넣어주어야 한다.
스프링은 이러한 과정을 완전히 자동화해주는
@ModelAttribute기능을 제공한다HelloData@Data@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor를 자동으로 적용@ModelAttribute 적용
RequestParamController: modelAttributeV1@ModelAttribute가 있으면 다음을 실행HelloData객체를 생성HelloData객체의 프로퍼티를 찾는다. 그리고 해당 프로퍼티의 setter를 호출해서 파라미터 값을 입력(바인딩)@ModelAttribute 생략
RequestParamController: modelAttributeV2@ModelAttribute는 생략 가능@RequestParam도 생략할 수 있으니 혼란이 발생할 수 있다HTTP 요청 메세지 - 단순 텍스트
요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우에는
@RequesetParam,@ModelAttribute를 사용할 수 없다HTTP 메시지 바디의 데이터를
InputStream을 사용해서 직접 읽을 수 있다RequestBodyStringController: requestBodyStringV2스프링 MVC는 다음 파라미터를 지원
RequestBodyStringController: requestBodyStringV3@RequestParamX,@ModelAttributeXHttpEntity를 상속받은 다음 객체들도 같은 기능을 제공return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED)RequestBodyStringController: requestBodyStringV4@RequestBodyHttpEntity를 사용하거나@RequestHeader를 사용하면 됨@RequestParam,@ModelAttribute와는 전혀 관련 X요청 파라미터 vs HTTP 메시지 바디
@RequestParam,@ModelAttribute@RequestBody@responsebody
@ResponseBody를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달할 수 있음HTTP 요청 메세지 - JSON
HTTP API에서 주로 사용하는 JSON 데이터 형식 조회
RequestBodyJsonController: requestBodyJsonV1HttpServletRequest를 사용해서 직접 HTTP 메시지 바디에서 데이터를 읽어와서, 문자로 변환
문자로 된 JSON 데이터를 Jackson 라이브러리인
objectMapper를 사용해서 자바 객체로 변환RequestBodyJsonController: requestBodyJsonV2@RequestBody를 사용해서 HTTP 메시지에서 데이터를 꺼내고 messageBody에 저장messageBody를objectMapper를 통해 자바 객체로 변환문자로 변환하고, 다시 JSON으로 변환하는 과정이 불편하다. @ModelAttribute 처럼 한 번에 객체로 변환할 수는 없을까?
RequestBodyJsonController: requestBodyJsonV3@RequestBody 객체 파라미터
@RequestBody HelloData data@RequestBody에 직접 만든 객체를 지정할 수 있따@RequestBody는 생략 불가능
스프링은
@ModelAttribute,@RequestParam과 같은 해당 애노테이션을 생략 시, 다음과 같은 규칙을 적용시킨다String,int,Integer같은 단순 타입 =@RequestParam@ModelAttribute따라서, 이 경우에는 HelloData에
@RequestBody를 생략하면,@ModelAttribute가 적용된다.HelloData data->@ModelAttribute HelloData dataRequestBodyJsonController: requestBodyJsonV4RequestBodyJsonController: requestBodyJsonV5@ResponseBody@ResponseBody를 사용하면 해당 객체를 HTTP 메시지 바디에 직접 넣어줄 수 있다. 물론 이 경우에도HttpEntity를 사용해도 된다@RequestBody요청@ResponseBody응답🔗 출처
All reactions