[Spring] 메세지 컨버터는 어떻게 동작할까 3

메세지 컨버터는 어떻게 동작할까 - 3

응답시의 메세지 컨버터의 동작

사용자의 응답을 반환하는 동작이 완료되고 나면 RequestResponseBodyMethodProcessorwriteWithMessageConverters가 수행됩니다. 이때 응답을 줄 Content-Type을 먼저 결정하게 되는데, 이 과정은 Request의 Accept 값메세지 컨버터들이 지원하는 타입에 의해 결정됩니다.

  • acceptableTypes

    reqest Accept의 헤더 값들

  • producibleTypes

    등록된 메세지 컨버터들 중에 응답 본문에 해당하는 타입에 대해 변환을 지원하는 메세지 컨버터들이 지원하는 미디어 타입

이 두개의 리스트를 가지고 교집합을 통해 Content-Type의 후보 리스트를 구하게 됩니다. 이렇게 선정된 후보들은 Media TypeQuality를 통해 정렬을 해 우선순위를 가지게 됩니다. Quality 값acceptableTypes의 값을 사용하게 됩니다. 이렇게 정렬된 Media Type중에서 와일드 카드 타입이 아닌 미디어 타입 중 퀄리티가 높은 미디어 타입이 응답에 사용될 미디어 타입으로 선택되고, 등록된 메세지 컨버터들 중 canWrite메소드로 해당 미디어 타입과 변환을 지원하는 컨버터를 통해 적절한 메세지 컨버터를 선택해 응답에 대한 정보를 HttpOutputMessage에 변환해 줍니다.

QnA

  1. 메세지 컨버터의 우선순위는 어떻게 결정되나요?

메세지 컨버터의 우선순위는 등록한 순서로 결정됩니다.

List> 형태로 저장되는데 Iterator를 통해 앞에꺼 부터 순회합니다.

  1. 응답시에 동일하게 높은 Quality가 있다면 어떤 미디어 타입을 선택하나요?

동일한 퀄리티가 존재한다면 미디어 타입의 파라미터 사이즈나, 메인 타입과 서드 타입의 와일드 카드 타입 여부를 검사합니다.

MediaType.sortBySpecificityAndQuality();를 참고하시면 됩니다.

Reference

메세지 컨버터는 어떻게 동작할까 2

메세지 컨버터는 어떻게 동작할까 3

메세지 컨버터는 어떻게 동작할까 4

Author: Song Hayoung
Link: https://songhayoung.github.io/2021/06/23/Spring/spring-message-converter-3/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.