Java spring mvc输出流csv

Java spring mvc输出流csv,java,spring,csv,spring-boot,fileoutputstream,Java,Spring,Csv,Spring Boot,Fileoutputstream,如何将de代码拆分为服务、存储库和控制器(SpringMVC) 这段代码对我有用,但不是很好的分割。 大表公开API REST的大表 @ApiOperation(value = "Search all customers",response = GoldenCustomer.class) @RequestMapping(value = "/goldenall/",method = RequestMethod.GET, produces = "application/json")

如何将de代码拆分为服务、存储库和控制器(SpringMVC) 这段代码对我有用,但不是很好的分割。 大表公开API REST的大表

    @ApiOperation(value = "Search all customers",response = GoldenCustomer.class)
    @RequestMapping(value = "/goldenall/",method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public ResponseEntity<?> getAllCustomers(HttpServletResponse response){
        LOGGER.info("Get all Golden Customers...");
        List<GoldenCustomer> goldenCustomers = null;
        String message = "Unknown exception";
        try {

            PreparedStatement st = session.prepare("select * from ckm_d_pilot.golden_clusters_by_customer where solr_query=?");
            //TODO
            String input_string = "*";
            String solrQuery = "{\"q\": \"*:"+input_string+"\", \"paging\": \"driver\"}";
            BoundStatement boundSt = st.bind(solrQuery);
            ResultSet rs = session.execute(boundSt.setFetchSize(1000));
            response.setContentType("text/csv");
            response.setHeader("Content-Disposition", "attachment; filename=export.csv;");
            ServletOutputStream os = response.getOutputStream();
            for(Row row: rs){
                String csvLine = row.getString("cluster_id")+","+row.getString("src_customer_id")+"\n";
                os.write(csvLine.getBytes("UTF-8"));
            }
            response.flushBuffer();

        }catch (Exception e){


            LOGGER.error("Intetrnal error WebService exception not found "+ message, e);
            throw new ReportInternalException(message);
        }

        return new ResponseEntity<>(HttpStatus.OK);
    }
@ApiOperation(value=“搜索所有客户”,response=GoldenCustomer.class)
@RequestMapping(value=“/goldenall/”,method=RequestMethod.GET,products=“application/json”)
@应答器
公共响应getAllCustomers(HttpServletResponse){
LOGGER.info(“获得所有黄金客户…”);
列出黄金客户=空;
字符串消息=“未知异常”;
试一试{
PreparedStatement st=session.prepare(“由客户从ckm_d_pilot.golden_clusters_中选择*,其中solr_query=?”;
//待办事项
字符串输入_String=“*”;
String solrQuery=“{\'q\':\”*:“+input\'u String+“\”,\'paging\':\'driver\'”;
BoundStatement boundSt=st.bind(solrQuery);
ResultSet rs=session.execute(boundSt.setFetchSize(1000));
response.setContentType(“text/csv”);
setHeader(“内容处置”、“附件;文件名=export.csv;”);
ServletOutputStream os=response.getOutputStream();
用于(行:rs){
String csvLine=row.getString(“集群id”)+,“+row.getString(“src\U客户id”)+”\n”;
写(csvLine.getBytes(“UTF-8”);
}
response.flushBuffer();
}捕获(例外e){
LOGGER.error(“未找到内部错误Web服务异常”+消息,e);
抛出新的ReportInternalException(消息);
}
返回新的响应状态(HttpStatus.OK);
}

以下是最低限度的重构代码,它为您提供了一些关于如何进行重构的信息

@ApiOperation(value = "Search all customers",response = GoldenCustomer.class)
@RequestMapping(value = "/goldenall/",method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public ResponseEntity<?> getAllCustomers(HttpServletResponse response){
    LOGGER.info("Get all Golden Customers...");
    List<GoldenCustomer> goldenCustomers = null;
    String message = "Unknown exception";
    try {

        String custCsv = new CustomerServiceImpl().getAllCustomers();
        response.setContentType("text/csv");
        response.setHeader("Content-Disposition", "attachment; filename=export.csv;");
        ServletOutputStream os = response.getOutputStream();
        os.write(custCsv.getBytes("UTF-8"));            
        response.flushBuffer();

    }catch (Exception e){

        LOGGER.error("Intetrnal error WebService exception not found "+ message, e);
        throw new ReportInternalException(message);
    }

    return new ResponseEntity<>(HttpStatus.OK);
}

public class CustomerServiceImpl {
    public String getAllCustomers () {
        return new CustomersDAOImpl().getAllCustomers();
    }

}

public class CustomersDAOImpl() {
    public String getAllCustomers() {
        StringBuilder sb = new StringBuilder();
        PreparedStatement st = session.prepare("select * from ckm_d_pilot.golden_clusters_by_customer where solr_query=?");
        //TODO
        String input_string = "*";
        String solrQuery = "{\"q\": \"*:"+input_string+"\", \"paging\": \"driver\"}";
        BoundStatement boundSt = st.bind(solrQuery);
        ResultSet rs = session.execute(boundSt.setFetchSize(1000));           
        for(Row row: rs){
            String csvLine = row.getString("cluster_id")+","+row.getString("src_customer_id")+"\n";
            sb.append(csvLine);                
        }
        return sb.toString();
    }

}
@ApiOperation(value=“搜索所有客户”,response=GoldenCustomer.class)
@RequestMapping(value=“/goldenall/”,method=RequestMethod.GET,products=“application/json”)
@应答器
公共响应getAllCustomers(HttpServletResponse){
LOGGER.info(“获得所有黄金客户…”);
列出黄金客户=空;
字符串消息=“未知异常”;
试一试{
字符串custCsv=new CustomerServiceImpl().getAllCustomers();
response.setContentType(“text/csv”);
setHeader(“内容处置”、“附件;文件名=export.csv;”);
ServletOutputStream os=response.getOutputStream();
写(custCsv.getBytes(“UTF-8”);
response.flushBuffer();
}捕获(例外e){
LOGGER.error(“未找到内部错误Web服务异常”+消息,e);
抛出新的ReportInternalException(消息);
}
返回新的响应状态(HttpStatus.OK);
}
公共类CustomerServiceImpl{
公共字符串getAllCustomers(){
返回新CustomersDAOImpl().getAllCustomers();
}
}
公共类CustomersDAOImpl(){
公共字符串getAllCustomers(){
StringBuilder sb=新的StringBuilder();
PreparedStatement st=session.prepare(“由客户从ckm_d_pilot.golden_clusters_中选择*,其中solr_query=?”;
//待办事项
字符串输入_String=“*”;
String solrQuery=“{\'q\':\”*:“+input\'u String+“\”,\'paging\':\'driver\'”;
BoundStatement boundSt=st.bind(solrQuery);
ResultSet rs=session.execute(boundSt.setFetchSize(1000));
用于(行:rs){
String csvLine=row.getString(“集群id”)+,“+row.getString(“src\U客户id”)+”\n”;
某人附加(csvLine);
}
使某人返回字符串();
}
}

注意:-我没有为Answer测试下面的代码

tks,但是对于内存不足异常的大型表,此方法会崩溃。逐步设置setFetchSize(1000),而不中断Answer的连接,但是对于内存不足异常的大型表,此方法会崩溃。我需要一步一步地发送(setFetchSize(1000))而不中断连接