Free Lines Arrow
본문 바로가기
Spring/spring mvc 1 스터디

[Spring] Message Converter

by skahn1215 2021. 11. 25.
728x90
반응형

Message Converter

Message Conveter 에 대해서 알아본다.

쉽게 이해할수 있도록 자료를 참고하여 정리를 했습니다.

 

  • 뷰를 사용하지 않고 HTTP API 처럼 JSON 데이터를 바디에 직접 읽거나 쓰는경우 HTTP 메시지 컨버터를 사용하면 편하다.
  • HTTP response 또는 request 에서 사용된다

Message Converter 가 적용되는 경우

  • HTTP Request:
     - @RequestBody, HttpEntity(RequestEntity)
  • HTTP Response:
     - @ResponseBody, HttpEntity(ResposnseEntity)

Message Converter 의 주요 구현체 들

  • 구현체들을 살펴보자 물론 이것 말고도 더 많이 있다.

ByteArrayHttpMessageConverter

  •  byte[] 데이터를 처리한다
  • Class Type: byte
  • Media Type: */*, application/octet-stream
  • 요청) @RequestBody byte[] data
  • 응답) @ResponseBody return byte[]

StringHttpMessageConverter

  • String 문자로 데이터를 처리한다.
  • Class Type: String
  • Media Type: */*, text/plain
  • 요청) @RequestBody String Data
  • 응답) @Response return "ok"

MappingJackson2HttpMessageConverter

  • Object, ,HashMap, Json 타입을 데이터로 처리
  • Class Type: Object, HashMap
  • Media Type: application/json 관련
  • 요청) @RequestBody Member data
  • 응답) @ResponseBody return data

 

HttpMessageConverter 의 중요 기능들

  • canRead(), canWriter():
     - 메세지 컨버터가 해당클래스, 미디어타입을 지원하는지 체크

  • read(), write(): 
     - 메시지 컨버터를 통해서 메시지를 읽고 쓰는기능

 

HTTP 요청 데이터를 Message Converter 가 처리하는 과정

  • HTTP Request 가 온다.
    - @RequestBody, HeepEntity 파라미터를 사용함.
  • canRead() 호출
     - 메시지를 읽을수 있는지 판단.
    - 대상클래스의 타입을 지원하는지 확인
    - Content-Type 확인
  • canRead() 조건 만족시 read()를 호출하여 객체를 생성하고 반환

 

HTTP 응답 데이터를 Message Conveter 가 처리하는 과정

  • 컨트롤러에서 @ResposeBody HttpEntity로 값이 반환된다
  • canWrite() 호출
     - 메시지를 쓸수 있는지 확인
     - 대상클래스의 타입확인
     - Http 요청의 Accept 미디어 타입확인
  • canWrite() 만족할 경우 write() 호출
     - Http 응답 메시지 바디에 데이터를 생성한다.

HTTP MessageConverter 위치

  • Http MessageConveter 는 어디서 동작할까?
  • 아래 그림 처럼 ArgumentResolver, ReturnValueHandlerHTTP Message Converter 를 사용하여 필요한 객체를 생성한다.

 

 

ArgumentResolver

  • ArgumentResolver란 뭘까?
  • 애노테이션 기반 컨들롤러는 매우 다양한 파라미터를 사용할수 있다.
    이걸 가능하게 해주는 것이 ArgumentResolver 이다.
  • 여기서 HTTP MessageConveter 를 사용해 필요한 객체들을 생성해낸다.

 

ArgumentResolver 가 처리하는 파라미터들

이외에도 여러개가 있다.

  • HttpServletRequest
  • Model
  • @RequestParam
  • @ModelAttribute
  • @RequestBody
  • HttpEntity

 

ArgumentResolver 동작방식

  • supportsParameter() 호출
     - 해당 파라미터를 지원하는지 홧인
  • 지원할 경우 resolveArgument() 호출
     - 실제 객체를 생성 후 컨트롤러로 넘어간다.

 

ReturnValueHandler

  • ArgumentResolver 와 비슷하지만 응답 값만 변환하고 처리한다.
  • 여기서 HTTP MessageConveter 를 사용해 필요한 객체들을 생성해낸다.

 

ReturnValueHandler 가 처리하는 파라미터들

이외에도 여러개가 있다.

  • ModelAndView
  • @ResponseBody
  • HttpEntity

 

 

 

참고

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/lecture/71225?tab=curriculum 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

댓글