진짜 개발자
본문 바로가기

FrameWork/Spring MVC

SpringMVC - Spring MVC 설정 - 4 (HttpMessageConverter)

728x90
SpringMVC - Spring MVC 설정 - 4 (HttpMessage Converter)

HttpMessageConverter에 설정에 대해서 알아보도록 하겠습니다.

 

 

HttpMessageConverter 등록(설정)

1. HttpMessageConverter란

우선 HttpMessageConverter란 사용자의 요청 본문에 담긴 내용을 Controller 에서 사용하기위한 Argument로 변환하거나, 서버에서 생성한 응답 결과를 응답 본문에 작성할 때 사용됩니다.

 

바로 위와 같이 @ResponseBody, @RequestBody를 사용할 때 HttpMessageConverter가 사용됩니다.

 

 

RestController


class 상단에 위와같이 @RestController가 붙어 있다면, 모든 메소드에 @ResponseBody를 부여한것과 같습니다, 따라서 @ResponseBody를 제거할 수도 있습니다.

 

 

2. 기본 HttpMessageConverter

- ByteArray

- String

- Resource

- Form

- ( JAXB2

Jackson2

Jacson

Gson

Atom

RSS )

Spring MVC에서는 기본으로 등록을 해주는 HttpMessageConverter 들이 있습니다. 그것들은 위와 같습니다. 괄호 안에 적힌 Converter들은 앞선 포스팅(https://galid1.tistory.com/532?category=783055)에서 알아보았듯이 @EnableWebMvc 어노테이션 이용시에 해당 라이브러리가 클래스패스에 존재한다면 자동으로 해당 HttpMessageConverter를 등록해주도록 되어있는 MessageConverter들입니다.

 

위의 기본 HttpMessageConverter들을 SpringBoot에서도 그대로 사용한다고 합니다.

 

 

String HttpMessageConverter


String Converter는 Http Body(메시지 본문)에 담긴 내용을 String으로 변환하거나 String을 Http Body(메시지본문)에 담을때 사용합니다.

 

위와 같은 Handler를 작성합니다. 간단히 사용자의 요청 본문에 담긴 message를 String으로 받아서, 그것을 그대로 응답 본문에 담아 return해주는 핸들러입니다.

 

위와 같이 테스트 코드를 작성합니다.

 

성공입니다. 즉, String HttpMessageConverter는 Spring MVC가 자동으로 등록해주는 것을 알 수 있습니다.

 

 

 

3. HttpMessageConverter 등록(설정)방법

기본적으로 추가해주는 HttpMessageConverter에 의해서 거의 모두 해결 되므로 HttpMessageConverter를 직접 등록, 설정할 일은 거의 없지만, 그래도 필요한 경우에는 아래의 방법들로 해결할 수 있습니다.

 

3.1 ConfigureMessageConverter

WebMvcConfigurer 인터페이스에서 제공해주는 메소드입니다. 하지만 위의 메소드를 이용하여 MessageConverter를 추가하는 경우 기본 HttpMessageConverter가 등록되지 않습니다.

 

3.2 extendsMessageConverter

만약, 기본적으로 등록되는 HttpMessageConverter에 커스텀 MessageConverter를 추가하고 싶은 경우에는 extendsMessageConverter를 이용하면 됩니다.

 

 

3.3 의존성을 통한 HttpMessageConverter 설정

이 방법은 @EnableWebMvc어노테이션을 부여하여 SpringMVC 설정을 했을 경우, 특정 의존성이 추가되어 있는경우 자동으로 그에 맞는 HttpMessageConverter가 추가되는 것을 이용한 설정방법입니다. 설정 방법은 https://galid1.tistory.com/554?category=783055 포스팅의 3.4를 참고하시면 될것 같습니다.