코드 그라데이션
HTTP 메시지 컨버터 본문
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