Java spring mvc输出流csv
如何将de代码拆分为服务、存储库和控制器(SpringMVC) 这段代码对我有用,但不是很好的分割。 大表公开API REST的大表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")
@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))而不中断连接