일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 의존관계
- 김영한
- DI
- 서블릿
- 참조변수
- 프록시
- 티스토리챌린지
- 스프링
- ocp
- fielderror
- http 메시지 컨버터
- 오블완
- equals()
- 코드트리조별과제
- 테스트코드
- @configuration
- JSON
- 추상클래스
- 코딩테스트
- 백준
- HttpServletResponse
- 코드트리
- html form
- 오버라이딩
- 다형성
- objecterror
- 인터페이스
- java
- 스프링컨테이너
- 싱글톤
- Today
- Total
minOS
스프링 MVC 기본 기능 - HTTP 요청 메시지(1) 본문
HTTP 요청 메시지 - 단순 텍스트
HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용, JSON, XML, TEXT
- 데이터 형식은 주로 JSON 사용
- POST, PUT, PATCH
요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우는 `@RequestParam` , `@ModelAttribute` 를 사용할 수 없다.
1) HttpServletRequest와 HttpServletResponse를 사용하여 요청 본문을 읽는 방법
@PostMapping("/request-body-string-v1") public void requestBodyStringV1(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); // 요청 본문을 읽기 위한 InputStream String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // InputStream을 String으로 변환 log.info("messageBody = {}", messageBody); // 로그에 요청 본문 출력 response.getWriter().write("ok"); // 응답 본문에 "ok" 작성 }
2) InputStream과 Writer를 사용하여 요청 본문을 읽고 응답을 작성하는 방법@PostMapping("/request-body-string-v2") public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException { String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); // InputStream을 String으로 변환 log.info("messageBody = {}", messageBody); // 로그에 요청 본문 출력 responseWriter.write("ok"); // 응답 본문에 "ok" 작성 }
스프링 MVC는 다음 파라미터를 지원한다.
1) InputStream(Reader): HTTP 요청 메시지 바디의 내용을 직접 조회
2) OutputStream(Writer): HTTP 응답 메시지의 바디에 직접 결과 출력
3) HttpEntity를 사용하여 요청 본문을 읽고 응답을 작성하는 방법@PostMapping("/request-body-string-v3") public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) throws IOException { String messageBody = httpEntity.getBody(); // HttpEntity에서 본문 추출 log.info("messageBody = {}", messageBody); // 로그에 요청 본문 출력 return new HttpEntity<>("ok"); // 응답 본문에 "ok" 작성하여 반환 }
스프링 MVC는 다음 파라미터를 지원한다
1) HttpEntity: HTTP header, body 정보를 편리하게 조회- 메시지 바디 정보를 직접 조회
- 요청 파라미터를 조회하는 기능과 관계 없음 `@RequestParam` X, `@ModelAttribute` X
2) HttpEntity는 응답에도 사용 가능- 메시지 바디 정보 직접 반환
- 헤더 정보 포함 가능
- view 조회X
HttpEntity 를 상속받은 다음 객체들도 같은 기능을 제공한다.- RequestEntity: HttpMethod, url 정보가 추가, 요청에서 사용
- ResponseEntity: HTTP 상태 코드 설정 가능, 응답에서 사용
4) RequestEntity와 ResponseEntity를 사용하여 요청 본문을 읽고 상태 코드와 함께 응답을 작성하는 방법
@PostMapping("/request-body-string-v4") public HttpEntity<String> requestBodyStringV4(RequestEntity<String> httpEntity) throws IOException { String messageBody = httpEntity.getBody(); // RequestEntity에서 본문 추출 log.info("messageBody = {}", messageBody); // 로그에 요청 본문 출력 return new ResponseEntity<>("ok", HttpStatus.CREATED); // 상태 코드 201(CREATED)와 함께 응답 본문에 "ok" 작성하여 반환 }
상태코드 지정 가능
5)@RequestBody를 사용하여 요청 본문을 읽고 @ResponseBody로 응답을 작성하는 방법@ResponseBody // 반환 값을 응답 본문으로 사용하기 위한 어노테이션 @PostMapping("/request-body-string-v5") public String requestBodyStringV5(@RequestBody String messageBody) { log.info("messageBody = {}", messageBody); // 로그에 요청 본문 출력 return "ok"; // 응답 본문에 "ok" 작성하여 반환 }
@RequestBody
`@RequestBody` 를 사용하면 HTTP 메시지 바디 정보를 편리하게 조회할 수 있다. 참고로 헤더 정보가 필요하다면 `HttpEntity` 를 사용하거나 `@RequestHeader` 를 사용하면 된다.이렇게 메시지 바디를 직접 조회하는 기능은 요청 파라미터를 조회하는 `@RequestParam` , `@ModelAttribute` 와 는 전혀 관계가 없다.
요청 파라미터 vs HTTP 메시지 바디- 요청 파라미터를 조회하는 기능: `@RequestParam` , `@ModelAttribute`
- HTTP 메시지 바디를 직접 조회하는 기능: `@RequestBody`@ResponseBody
@ResponseBody를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달할 수 있다.물론 이 경우에도 view를 사용하지 않는다.
'TIL > 김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
스프링 MVC 기본 기능 - 응답(1) (0) | 2024.07.31 |
---|---|
스프링 MVC 기본 기능 - HTTP 요청 메시지(2) (0) | 2024.07.30 |
스프링 MVC 기본 기능 - @RequestParam,@ModelAttribute (0) | 2024.07.28 |
스프링 MVC 기본 기능 - HTTP 요청 파라미터 (0) | 2024.07.28 |
스프링 MVC 기본 기능 - HTTP 요청 (0) | 2024.07.28 |