SpringMVC - 10. HTTP 요청 메세지
HTTP 요청 메세지
-
HTTP Message Body에 데이터를 직접 담아서 요청하는 경우
- 요청 파라미터와 다르게 @RequestParam, @ModelAttribute 사용 불가
- HTML Form 형식은 요청 파라미터로 인정되므로 가능
-
HTTP API에서 주로 사용됨
-
type: JSON, XML, Text
-
method: POST, PUT, PATH
-
단순 텍스트
01. InputStream 사용
-
@PostMapping("/request-body-string-v2") public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException { // stream으로 받으면 byte코드이므로 인코딩을 설정해줘야함 (default: OS 기본설정) String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); log.info("messageBody={}", messageBody); responseWriter.write("ok"); }
02. HTTPEntity 사용
- header, body 정보를 편리하게 조회
-
응답에도 사용 가능 (view 조회는 X)
-
@PostMapping("/request-body-string-v3") public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) throws IOException { // HTTP Content Body를 받아옴 String body = httpEntity.getBody(); log.info("messageBody={}", body); return new HttpEntity<>("ok"); }
-
HTTP 메세지 바디를 읽어서 문자나 객체로 변환해서 전달해줌
- => ‘HttpMessageConverter’라는 기능을 사용
03. @RequestBody, @ResponseBody 사용
-
@ResponseBody @PostMapping("/request-body-string-v4") public String requestBodyStringV4(@RequestBody String messageBody) throws IOException { log.info("messageBody={}", messageBody); return ("ok"); }
-
이 기능을 많이 사용
- 헤더 정보가 필요하면 HttpEntity를 사용하거나 @RequestHeader를 사용
JSON
- HTTP API에서 주로 사용하는 데이터 형식
- ObjectMapper를 사용
01. InputStream 사용
02. @RequestBody, @ResponseBody 사용
-
@ResponseBody @PostMapping("/request-body-json-v2") public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException { log.info("messageBody={}", messageBody); HelloData helloData = objectMapper.readValue(messageBody, HelloData.class); log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); return "ok"; }
03. @ResquestBody + 객체 파라미터
-
@ResponseBody @PostMapping("/request-body-json-v3") public String requestBodyJsonV3(@RequestBody HelloData helloData){ log.info("username={}, age={}", helloData.getUsername(), helloData.getAge()); return helloData; }
-
HTTP message Converter가 JSON을 자동으로 객체로 변환해줌 (ObjectMapper 대신 처리)
-
이 때, @RequestBody를 생략할 수 없음
- 생략 시, @ModelAttribute가 적용됨 => HTTP 메세지 바디가 아님
- => 요청 파라미터를 찾아버린다 => 기본값으로 나옴
- Client측의 Accept: application/json이 헤더에 적용되어 있는 경우, JSON으로 내보낼 수도 있음
댓글남기기