美文网首页
springMVC 使用ResponseEntity下载和Map

springMVC 使用ResponseEntity下载和Map

作者: archerdu | 来源:发表于2019-08-14 15:41 被阅读0次

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

    相关文章

      网友评论

          本文标题:springMVC 使用ResponseEntity下载和Map

          本文链接:https://www.haomeiwen.com/subject/ftngjctx.html