问题起因:配置了统一的JSON日期输出格式
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
解决方法:增加ByteArrayHttpMessageConverter
<mvc:message-converters>
<!-- 解决下载文件字节乱序的问题 -->
<bean class="org.springframework.http.converter.json.ByteArrayHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
下载方法:ResponseEntity使用 byte[]作为返回类型
/**
* 下载文件
*
* @return 下载对象
*/
@RequestMapping(value = "download", method = RequestMethod.GET)
public ResponseEntity<byte[]> download() {
String logId = UuidUtil.getUUID();
logger.info("CommonController download[下载设备类型最新文件] start type:{}, group:{} filename:{} logId:{}", type, group, filename, logId);
byte[] bytes = new byte[0];
// TODO 生成字节数组代码
HttpHeaders headers = new HttpHeaders();
headers.setCacheControl("no-cache, no-store, must-revalidate");
headers.setContentDispositionFormData("attachment", filename);
headers.setPragma("no-cache");
headers.setExpires(0);
logger.info("CommonController download[下载设备类型最新文件] end logId:{}", logId);
return ResponseEntity.ok().headers(headers).contentLength(bytes.length).contentType(MediaType.APPLICATION_OCTET_STREAM).body(bytes);
}
网友评论