ie9 등에서 json 파일 다운로드[펌]
아는 동생이 ie9에서 ajax호출시 파일다운로드가 된다고 하여 찾아 보았다.
펌1
<!-- json 형태의 view -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="contentType" value="text/html; charset=UTF-8" />
</bean>
ModelAndView mav = new ModelAndView("jsonView");
mav.addObject("result", ticketResponse);
return mav;
펌2
Spring의 @ResponseBody + Jackson JSON 라이브러리를 이용하여
JSON 파싱한 결과
크롬에서는 정상적으로 JSON 값을 받아왔으나
IE에서는 다운로드가 되는 현상이 발생되었습니다.
이러한 현상이 발생하는 이유는
JacksonMessageConverter의 응답타입이 "application/json" 이어서
IE에서는 정상적으로 동작되지 않는 것이었습니다.
그래서 응답타입을 "text/plain"형태로 설정을 변경을 해주어야 합니다.
크롬에서만 작업하다보니 IE에서 문제가 발생한거라는 것을 몰랐었네요;;
만약 "json-simple" 또는 "json-lib" 와같이 파싱해주는 라이브러리 사용시
response.setContentType을 "text/plain" 으로 설정해주면 문제 없이 IE/크롬 등
모든 브라우저에서 정상작동하는 것이라 신경을 쓰지 않았었는데;;;
상단 포스팅 링크의 코드에 대한 실행결과를 확인해 보도록 하겠습니다.
1.크롬실행결과
2.IE실행결과
크롬은 정상적으로 메시지 창이 출력되는 반면,
IE에서는 서버에서 응답받은 결과값이 파일로 다운로드처리가 되었습니다.
그럼 이 부분을 해결하기 위하여
<mvc:annotation-driven />
상단 기존 태그를 다음과 같이 코드 변경을 해주도록 합니다.
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
위와같이 설정을 해주었다면 다시한번 IE에서 동작을 시켜보도록 하겠습니다.
IE 재실행 결과
위와같이 정상적으로 업로드된 파일에 대하여
정상적으로 JSON OBJECT를 받아오는 결과를 확인 할 수 있었습니다.
Spring의 @ResponseBody를 이용한 JSON 구현할때
text/plain 을 적용해주기 위해서는 "mvc:annotation-driven" 태그를
위와같이 적용을 해주는 것이 이 포스팅의 핵심내용입니다.