springMVC导出 CSV案例

来源:互联网 发布:文档编辑软件 编辑:程序博客网 时间:2024/06/06 01:38

转自:http://www.cnblogs.com/chenyq/p/5179623.html

contorller

/**
     * 购买订单CSV
     * OrderParamsVo 传入的参数
     */
    @RequestMapping("findBuyCSV")
    @ResponseBody
    public JsonResult findBuyCSV(OrderParamsVo params, HttpServletResponse response) {
        List<Map<String, Object>> dataList=null;
        Validator.getInstance().validate(params);
        List<OrderBo> orderBos = orderService.findBuyCSV(params);// 查询到要导出的信息
        if (orderBos.size() == 0) {
            JsonResult.buildFailedResult("无数据导出");
        }
        String sTitle = "投资日期,订单号,姓名,购买产品,金额,状态";
        String fName = "buywater_";
        String mapKey = "createDate,no,realname,productName,money,state";
        dataList = new ArrayList<>();
        Map<String, Object> map = null;
        for (OrderBo order : orderBos) {
            map = new HashMap<String, Object>();
            map.put("createDate", DateFormatUtils.format(order.getCreateDate(), "yyyy/MM/dd HH:mm"));
            map.put("no", order.getNo());
            map.put("realname", order.getUserName());
            map.put("productName", order.getProductName());
            map.put("money", order.getMoney());
            map.put("state", order.getState());


            dataList.add(map);
        }
        try (final OutputStream os = response.getOutputStream()) {
            ExportUtil.responseSetProperties(fName, response);
            ExportUtil.doExport(dataList, sTitle, mapKey, os);
            return null;


        } catch (Exception e) {
            logger.error("购买CSV失败", e);


        }
        return JsonResult.buildFailedResult("数据导出出错");
    }


工具类

package com.util;


import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;


import javax.servlet.http.HttpServletResponse;


import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ExportUtil {
    private static final Logger logger = LoggerFactory.getLogger(ExportUtil.class);
    /** CSV文件列分隔符 */
    private static final String CSV_COLUMN_SEPARATOR = ",";


    /** CSV文件列分隔符 */
    private static final String CSV_RN = "\r\n";


    /**
     * 
     * @param dataList 集合数据
     * @param colNames 表头部数据
     * @param mapKey 查找的对应数据
     * @param response 返回结果
     */
    public static boolean doExport(List<Map<String, Object>> dataList, String colNames, String mapKey, OutputStream os) {
        try {
            StringBuffer buf = new StringBuffer();


            String[] colNamesArr = null;
            String[] mapKeyArr = null;


            colNamesArr = colNames.split(",");
            mapKeyArr = mapKey.split(",");


            // 完成数据csv文件的封装
            // 输出列头
            for (int i = 0; i < colNamesArr.length; i++) {
                buf.append(colNamesArr[i]).append(CSV_COLUMN_SEPARATOR);
            }
            buf.append(CSV_RN);


            if (null != dataList) { // 输出数据
                for (int i = 0; i < dataList.size(); i++) {
                    for (int j = 0; j < mapKeyArr.length; j++) {
                        buf.append(dataList.get(i).get(mapKeyArr[j])).append(CSV_COLUMN_SEPARATOR);
                    }
                    buf.append(CSV_RN);
                }
            }
            // 写出响应
            os.write(buf.toString().getBytes("GBK"));
            os.flush();
            return true;
        } catch (Exception e) {
            logger.error("doExport错误...", e);
        }
        return false;
    }


    /**
     * @throws UnsupportedEncodingException
     * 
     *             setHeader
     */
    public static void responseSetProperties(String fileName, HttpServletResponse response) throws UnsupportedEncodingException {
        // 设置文件后缀
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String fn = fileName + sdf.format(new Date()).toString() + ".csv";
        // 读取字符编码
        String utf = "UTF-8";


        // 设置响应
        response.setContentType("application/ms-txt.numberformat:@");
        response.setCharacterEncoding(utf);
        response.setHeader("Pragma", "public");
        response.setHeader("Cache-Control", "max-age=30");
        response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fn, utf));
    }


}

0 0