Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

HTTP 메시지 컨버터 본문

인프런/[인프런] 스프링 MVC 1

HTTP 메시지 컨버터

Seung__ 2021. 9. 15. 23:22

HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.

 

1. @ResponseBody 사용 원리


 

  • @ResponseBody 를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter 가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
  • 참고: 응답의 경우 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서
    HttpMessageConverter 가 선택된다. 

 

 

2. HTTP 메시지 컨버터 사용되는 경우.


  • HTTP 요청 : @RequestBody, HttpEntity(RequestEntity)
  • HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity)

 

 

3. Http 메시지 컨버터  인터페이스


  • org.springframework.http.converter.HttpMessageConverter
  • HTTP 메시지 컨버터는 HTTP 요청, HTTP 응답 둘 다 사용됨.
    • canRead() , canWrite() : 메시지 컨버터가 해당 클래스, 미디어타입을 지원하는지 체크
    • read() , write() : 메시지 컨버터를 통해서 메시지를 읽고 쓰는 기능

 

 

4. 스프링 부트의 기본 메시지 컨버터, 우선순위


  • 0 = ByteArrayHttpMessageConverter
    • byte[] 데이터 처리
  • 1 = StringHttpMessageConverter
    • 문자로 데이터 처리함.
  • 2 = MappingJackson2HttpMessageConverter
    • application/json 

 

5. HTTP 요청 데이터 읽기


  • HTTP 요청이 오고, Controller에서 @RequestBody, HttpEntity 사용하는 경우
  • 메시지 컨버터는 메시지를 읽을 수 있는지 확인을 위해 canRead() 호출함.
    •  대상 클래스를 지원하는지???
      (@RequestBody의 대상 클래스)
    • HTTP 요청의 ContentType 을 지원하는지??
  • canRead() 조건을 만족하면 읽을 수 있다고 확인되기 때문에 read() 호출하여 객체생성, 반환.

 

6. HTTP 응답 데이터 생성


  • Controller에서 @ResponseBody, HttpEntity로 값을 반환함.
  • 메시지 컨버터가 메시지를 쓸 수 있는지 확인하기 위해서 .canWrite()호출
    • 대상 클래스 지원?(@ResponseBody의 대상 클래스)
    • HTTP 요청의 Accept 만족??
  • canWrite()만족하면 write()호출해서 HTTP 응답메시지 바디에 데이터 생성함 

 

Comments