ie9 등에서 json 파일 다운로드[펌]


아는 동생이 ie9에서 ajax호출시 파일다운로드가 된다고 하여 찾아 보았다.


펌1

문제
 ie9 등에서 ajax 호출 시 응답을 json으로 받는 경우 파일 다운로드 현상이 발생함.

해결
spring-servlet.xml을 다음과 같이 설정함
<!-- json 형태의 view -->
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="contentType" value="text/html; charset=UTF-8" />
</bean>

Controller에 jsonView를 사용하도록 설정하고 데이터를 추가함.
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" 태그를

위와같이 적용을 해주는 것이 이 포스팅의 핵심내용입니다.