스프링/3. 스프링 MVC

44. HTTP API

sdafdq 2023. 8. 12. 21:18

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