问题描述
我的项目使用的是spring4.5 零xml配置方式搭建的,今天在处理文件下载的时候,发现pdf文件下载后总是提示文件损坏,无法打开。
问题原因
问题原因是java中会默认将InputStrem流转为String类型,再将String转换为OutputStream,如果文件中存在图片、音频、视频等内容时就会出错。
解决方案
在configureMessageConverters方法中添加byteArrayHttpMessageConverter转换。具体的代码如下
@Configuration
public class MyWebMvcConfigurationSupport extends WebMvcConfigurationSupport {
@Autowired
private TokenInterceptor tokenInterceptor;
@Override
protected RequestMappingHandlerMapping createRequestMappingHandlerMapping() {
MyRequestMappingHandlerMapping handlerMapping = new MyRequestMappingHandlerMapping();
handlerMapping.setOrder(0);
handlerMapping.setInterceptors(getInterceptors());
return handlerMapping;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(byteArrayHttpMessageConverter());
converters.add(jacksonConverter());
}
/**
* 格式转换
* @return
*/
@Bean
public FastJsonHttpMessageConverter jacksonConverter() {
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.APPLICATION_XML);
mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
mediaTypes.add(MediaType.APPLICATION_JSON);
FastJsonHttpMessageConverter converter =
new AppMsgConverter();
converter.setSupportedMediaTypes(mediaTypes);
return converter;
}
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter(){
return new ByteArrayHttpMessageConverter();
}