상황 및 원인
@RestController
/ @ResponseBody
붙였는데
요청에 대한 응답이 모두 404 뜨고 json 값이 넘어가지 않아서 찾아봄
스프링 4 이상부터는 따라서 자동으로 JacksonHttpMessageConverter
, Jackson2HttpMessageConverter
, GsonHttpMessageConverter
를 설정해주지만
그 이하버전의 경우 별도로 설정을 해줘야 사용이 가능
해결방법
위와 같은 dispatcher-servlet.xml
파일에서 property 에 아래 내용 추가하면 댐
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
설명
StringHttpMessageConverter
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
StringHttpMessageConverter는 문자열 데이터를 HTTP 응답으로 변환하는 역할
supportedMediaTypes는 이 컨버터가 지원하는 MIME 타입을 정의하는데, 여기서 text/html;charset=UTF-8
과 application/json;charset=UTF-8
두 가지를 설정
이 설정은 HTML 응답과 JSON 응답 모두 UTF-8 인코딩을 사용해 처리할 수 있도록 함
MappingJackson2HttpMessageConverter
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
MappingJackson2HttpMessageConverter
는 JSON 데이터를 직렬화/역직렬화하는 데 사용
Spring이 객체를 JSON으로 변환해서 HTTP 응답으로 내보낼 때 사용하는 기본 컨버터로, 내부적으로 Jackson 라이브러리를 활용함
이 설정이 없으면 RestController
에서 객체를 반환할 때 JSON 형식으로 직렬화되지 않음
RestController가 작동하지 않았던 이유는 JSON 변환을 담당하는 MappingJackson2HttpMessageConverter
가 Spring에서 설정되지 않았기 때문
Spring MVC의 메시지 컨버터(Message Converter) 기능
참고
'Spring > Spring (Legacy)' 카테고리의 다른 글
스프링 파일다운로드 OCTET 인식불가 오류 (3) | 2024.11.11 |
---|---|
[전자정부] @Transactional 설정하기 (xml) (0) | 2024.11.06 |
스프링 스케쥴링 사용법 (0) | 2024.08.19 |
마이바티스 result 로 vo 2개 설정하기 (0) | 2024.07.10 |
[전자정부 Egov] Swagger 적용방법(스프링 레거시) (1) | 2024.05.28 |