POST, PUT, PATCH 사용
요청파라미터, get이나 html form을 통한 것을 제외하고는 @RequestParam이나 @ModelAttribute를 쓸 수 없다. 저거 둘은 딱 저 2가지 경우에만 사용함.
@Slf4j
@Controller
public class RequestBodyStringController {
@PostMapping("/request-body-string-v1")
public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("message body={}",messageBody);
response.getWriter().write("ok");
}
@PostMapping("/request-body-string-v2")
public void requestBodyStringV2(InputStream inputStream, Writer responseWriter) throws IOException {
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("message body={}",messageBody);
responseWriter.write("ok");
}
@PostMapping("/request-body-string-v3")
public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) throws IOException {
String messageBody = httpEntity.getBody();
log.info("message body={}",messageBody);
return new HttpEntity<>("ok");
}
@ResponseBody
@PostMapping("/request-body-string-v4")
public String requestBodyStringV4(@RequestBody String messageBody){
log.info("message body={}",messageBody);
return "ok";
}
}
inputStream Stream은 다 바이트 정보라서 바꿔야 함. response의 writer 얻어서 쓰고
두번째는 아예 InputStream이랑 Writer를 request와 response에서 꺼내오는게 아니라 인자로 받을 수 있음.
세번째는 HttpEntity라고.. 저걸 HttpMessageConverter라고 하는데 저거 타입 String으로 해두면 저 http body 안에 있는 걸 저 타입으로 변환해 줌. 그래서 그냥 getBody 하면 쉽게 얻을 수 있음.
그리고 return으로 new HttpEntity<>() 해줬는데 저렇게 하면 그냥 응답바디에 넣어주는 거임.
저걸 상속받는 RequestEntity, ResponseEntity도 있음. 기능 추가된 정도. 예를 들면 ResponseEntity에는 상태코드까지 추가 가능함.
그냥 Request, Response 맞게 쓰면 됨.
이 HTTP Converter는 좀 이따 설명해 준다고 함.
마지막은 아예 @RequestBody 쓰면 아예 응답메시지 바디를 그대로 읽어 저기 타입에 맞게 들어가게 해줌.
@ResponseBody도 비슷하게 아예 return을 바디에 넣어주는거임.
'스프링 > 3. 스프링 MVC' 카테고리의 다른 글
46. 정적 리소스, 뷰 템플릿 (0) | 2023.08.13 |
---|---|
45. HTTP API JSON (0) | 2023.08.12 |
43. ModelAttribute (0) | 2023.08.12 |
42. 스프링으로 파라미터 꺼내기 (0) | 2023.08.12 |
41. 요청 파라미터 종류 (0) | 2023.08.12 |