springMVC 使用ResponseEntity下载和Map

2019-08-14  本文已影响0人  archerdu

问题起因:配置了统一的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);
}
上一篇下一篇

猜你喜欢

热点阅读