코드 그라데이션

HTTP 메시지 컨버터 본문

Spring/MVC 1

HTTP 메시지 컨버터

완벽한 장면 2023. 10. 28. 08:35

HTTP 메시지 컨버터

HTTP 메시지 컨버터뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, 

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

 

@ResponseBody 사용 원리

[그림]

@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
Comments