Spring/Spring MVC

HTTP Request Message

민철킹 2021. 5. 9. 18:05

단순 텍스트

 

Request Parameter와 다르게, HTTP Message Body를 통해 데이터가 직접 넘어오는 경우는

@RequestParam, @ModelAttribute를 사용할 수 없다.

 

먼저 단순한 텍스트를 HTTP Message Body에 담아서 전송하고, 이를 InputStream으로 읽어보자.

 


Spring 공식 문서를 참조하면 알 수 있듯이, InputStream과 OutputStream을 직접 받을 수 있다.

따라서 아래와 같이 코드를 작성할 수 있다.

 

 


스프링 MVC는 다음 파라미터를 지원한다.

 

HttpEntity : HTTP header, body 정보를 편리하게 조회

  • 메시지 바디 정보를 직접 조회
  • 요청 파라미터를 조회하는 기능과 관계 없음

HttpEntity는 응답에도 사용 가능

  • 메시지 바디 정보를 직접 반환
  • 헤더 정보 포함 가능
  • view 조회X

메시지 바디 정보를 직접 반환

이를 바탕으로 코드를 작성해보면

  • HttpMessageConverter가 동작하여 메시지 바디를 보고 바이트 코드를 문자로 바꾸어준다.
  • getHeader()를 통해 헤더정보도 가져올 수 있음.

 

HttpEntity를 상속받은 다음 객체들도 같은 기능을 제공

  • RequestEntity
    • HttpMethod, url 정보가 추가됨, 요청에서 사용
  • ResponseEntity
    • HTTP 상태 코드 설정 가능, 응답에서 사용

HttpEntity를 상속받은 객체를 사용하여 위와 같이 변경하여 사용할 수 있다.

상태 코드가 200에서 201로 변경된 것을 확인할 수 있다.

 

Spring MVC 내부에서 HTTP Message Body를 읽어 문자나 객체로 변환하여 전달해주는데,

이때 HttpMessageConverter라는 기능을 사용함.

 

 


@RequestBody / @ResponseBody

 

@RequestBody를 사용하면 HTTP Message Body 정보를 편리하게 조회할 수 있다. 헤더 정보가 필요하면 @RequestHeader를 사용

@ResponseBody를 사용하면 응답 결과를 HTTP Message Body에 담아서 전달할 수 있다.

이 경우에는 view를 사용 X 

 

 

요청 파라미터를 조회하는 기능 : @RequestParam, @ModelAttribute

 

HTTP Message Body를 직접 조회하는 기능 : @RequestBody 

 

 

 


JSON

 

JSON 데이터 형식을 조회해보자.

 

먼저 서블릿 방식으로 조회

  • 문자로 된 JSON 데이터를 Jackson 라이브러리인 objectMapper 를 사용해서 자바 객체로 변환

 

 


 

@RequestBody / @ResponseBody 사용

 

 

 


@RequestBody 파라미터로 객체 받기

 

  • @RequestBody에 객체를 파라미터로 넘길 수 있다.
  • HttpEntity, @RequestBody를 사용하면 HTTP Message Converter HTTP Message Body의 내용을 원하는 문자나 객체 등으로 변환해준다.
  • HTTP Message Converter는 문자 뿐만 아니라 JSON도 객체로 변환해줌. V2에서 했던 작업을 대신 처리

 

@RequestBody는 생략 불가능

  • 스프링이 정해놓은 규칙에 의해 이를 생략하면 @ModelAttribute가 적용되어버림.
  • @ModelAttribute가 적용되어 HTTP Message Body가 아니라 요청 파라미터를 처리함.

 

content-type이 application/json이어야 JSON을 처리할 수 있는 컨버터가 실행됨

 


HttpEntity

 

 

 


객체를 응답으로 반환하기

 

  • 이 경우 또한 HttpEntity를 사용해도 된다.
  • 해당 객체를 HTTP Message Body에 집어 넣어주는 것

 

@RequestBody 요청

  • JSON 요청 -> HTTP Message Converter -> 객체

@ResponseBody 응답

  • 객체 -> HTTP Message Converter -> JSON 응답

 

반응형

'Spring > Spring MVC' 카테고리의 다른 글

HTTP Message Converter  (0) 2021.05.11
HTTP Response  (0) 2021.05.10
HTTP Request Parameter  (0) 2021.05.07
HTTP 요청 - 헤더 정보  (0) 2021.05.07
요청 매핑  (0) 2021.05.06