티스토리 뷰
HTTP 메시지 컨버터
HTTP 메시지 컨버터뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라,
HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다.
@ResponseBody 사용 원리
[그림]
다시 돌아가서
HTTP 메시지 컨버터 인터페이스
/**
* HTTP 요청 및 응답 메시지를 변환하는 데 사용되는 인터페이스입니다.
* 이 인터페이스를 구현하는 클래스는 HTTP 요청 메시지를 Java 객체로 변환하거나,
* Java 객체를 HTTP 응답 메시지로 변환하는 작업을 수행할 수 있습니다.
*
* @param <T> 변환할 객체의 타입을 나타내는 제네릭 타입 매개변수
*/
public interface HttpMessageConverter<T> {
/**
* 지정된 클래스와 미디어 타입에 대해 읽기(read) 작업을 수행할 수 있는지 여부를 확인합니다.
*
* @param clazz 요청 메시지를 변환할 Java 클래스
* @param mediaType 요청의 미디어 타입 (예: JSON, XML)
* @return 읽기 작업이 가능하면 true, 그렇지 않으면 false 반환
*/
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
/**
* 지정된 클래스와 미디어 타입에 대해 쓰기(write) 작업을 수행할 수 있는지 여부를 확인합니다.
*
* @param clazz 응답 메시지를 변환할 Java 클래스
* @param mediaType 응답의 미디어 타입 (예: JSON, XML)
* @return 쓰기 작업이 가능하면 true, 그렇지 않으면 false 반환
*/
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
/**
* 이 구현이 지원하는 미디어 타입 목록을 반환합니다.
*
* @return 지원하는 미디어 타입 목록
*/
List<MediaType> getSupportedMediaTypes();
/**
* HTTP 입력 메시지를 지정된 클래스의 객체로 읽어옵니다.
*
* @param clazz 요청 메시지를 읽어올 Java 클래스
* @param inputMessage HTTP 입력 메시지
* @return 읽어온 객체
* @throws IOException 요청 메시지 읽기 중 발생하는 입출력 예외
* @throws HttpMessageNotReadableException 메시지를 읽을 수 없는 경우 발생하는 예외
*/
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
/**
* 지정된 객체를 HTTP 출력 메시지로 작성합니다.
*
* @param t 작성할 객체
* @param contentType 작성할 메시지의 미디어 타입 (예: JSON, XML)
* @param outputMessage HTTP 출력 메시지
* @throws IOException 응답 메시지 작성 중 발생하는 입출력 예외
* @throws HttpMessageNotWritableException 메시지를 작성할 수 없는 경우 발생하는 예외
*/
void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException;
}
=> HTTP 메시지 컨버터는 HTTP 요청, HTTP 응답 둘 다 사용된다.
스프링 부트 기본 메시지 컨버터 (일부는 생략)
주요한 메시지 컨버터 소개
StringHttpMessageConverter
content-type: application/json
@RequestMapping
void hello(@RequestBody String data) {}
MappingJackson2HttpMessageConverter
content-type: application/json
@RequestMapping
void hello(@RequestBody HelloData data) {}
안 되는 케이스
content-type: text/html
@RequestMapping
void hello(@RequestBody HelloData data) {}
HTTP 요청 데이터 읽기
HTTP 응답 데이터 생성
728x90
반응형
'[개발] - Spring > MVC 1' 카테고리의 다른 글
웹 페이지 만들기 (1) 요구사항 분석 및 상품 도메인 개발 (0) | 2023.10.30 |
---|---|
요청 매핑 핸들러 구조 (1) | 2023.10.29 |
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 (0) | 2023.10.10 |
HTTP 응답 - 정적 리소스, 뷰 템플릿 (1) | 2023.10.10 |
HTTP 요청 메시지 - JSON (0) | 2023.10.10 |
Comments