从Spring Rest控制器返回对象中的文件

时间:2019-09-20 19:58:38

标签: java file csv spring-restcontroller

我正在尝试创建一个rest控制器,该控制器返回一个包含String,Long和csv文件的对象。我之所以无法这样做,是因为我一用Java编写了文件创建逻辑,而不是返回它,而是在主机上创建了一个文件。

我已经尝试使用writer和output流将整个对象写入httpservletresponse,但是没有给出预期的结果。我从控制器返回了该对象,但是它没有返回该对象,而是在主机上创建了一个文件,根本没有返回任何其他值。

public class MyReturnObject {
  private Long countOfRows;

  private File csvDataFile;

  private String errorMessage;
}
@RequestMapping(value = "/api/fetchInfo", method = RequestMethod.GET)
public MyReturnObject fetchInfoRestControllerMethod (String param1) {
//some logic/ service calls
return createMyReturnObject(values);
}
public MyReturnObject createMyReturnObject(List<CustomObject> values) {
  File csvFile = new File("myinfo.csv");
  file.createNewFile();
  FileWriter writer = new FileWriter(csvFile);
  writer.write("test");
  //some lines
  MyReturnObject returnObject = MyReturnObject.builder()
                                .countOfRows(x)
                                .csvDataFile(csvFile)
                                .errorMessage(y).build();

  return returnObject;

}

这只是我编写的一些伪代码。我在createMyReturnObject中构建的对象未返回预期结果。我在想是否有可能从rest控制器返回类似对象MyReturnObject的对象。请帮助我提出想法,以取得预期的结果。

2 个答案:

答案 0 :(得分:1)

很遗憾,您不能同时有两个响应bodies。您可以将其设置为text/csvtext/json,并且一次可以返回一个响应正文。

但是,您可以将CSV转换为字节,然后Base64.enocode并将其放入对象中。您还可以将CSV存储在字符串中,并通过自定义line separator返回。

答案 1 :(得分:0)

在您的项目中使用jackson库或gson序列化您的类MyReturnObject。

#headerSearch