2017-08-17 203 views
1

我正在写一个spring rest方法来从数据库中获取详细信息,并将其设置为响应POJO,然后将其返回。目前我需要使用CSV来生成此响应,而不是默认的json,当使用POSTMAN或RC命中URL时,就像可下载的带有数据的CSV文件一样。我搜索了很多网站,但不确定少数逻辑。GetMapping使用Spring Boot生成CSV文件

  1. 我们是否需要编写业务逻辑来将pojo类的值转换为csv格式还是spring有任何转换机制?
  2. Produces =“text/csv”在很多地方被提及,这是否正确地转换响应?

目前我还没有为CSV转换编写任何代码。

@GetMapping("/batch/export" , produces="text/csv") 
public ResponseEntity<ApplicationResponse> getBatchDetails(
     HttpServletRequest request) { 

    ApplicationRequest appRequest = ApplicationServiceMapper.mapRequestFromHttpRequest(request); 
    ApplicationResponse response = appService.getDBDetails(appRequest); 
    return new ResponseEntity<>(response, HttpStatus.OK); 

} 

这里的回答是,在其POJO格式的所有数据,如果我们不给服务回报标注生产则默认情况下春天将返回响应JSON的一个。有人可以指导我吗?提前致谢。

+0

[如何在浏览器中从Spring控制器中返回CSV数据]可能的副本(https://stackoverflow.com/questions/22947751/how-to-return-csv-data-in-browser-from-spring-controller ) –

+0

Spring Boot使用Spring WebMVC并且Spring WebMVC具有[内置支持](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html#view -jasper-reports)通过JasperReports发送CSV文件。另外,可以使用任何流行的CSV处理库自定义'MessageConverter' [可以构建](https://stackoverflow.com/a/44094437/1126526)。 – manish

+0

嘿,这个:https://stackoverflow.com/a/45729709/1942642回答你的问题? –

回答

1

只使用@GetMappingproduces="text/csv"是不够的。它只负责设置响应标题Content-Type: text/csv

你需要的响应添加为参数HttpServletResponse response,将您POJO为有效csv文件,也只有这样,写csv文件到HttpServletResponse

+0

这有点回答了我的问题,但我所做的是使用OpenCSV api完成了它。 – user2632905