Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从spring rest控制器返回对象中的文件_Java_File_Csv_Spring Restcontroller - Fatal编程技术网

Java 从spring rest控制器返回对象中的文件

Java 从spring rest控制器返回对象中的文件,java,file,csv,spring-restcontroller,Java,File,Csv,Spring Restcontroller,我试图创建一个rest控制器,它返回一个包含字符串、Long和csv文件的对象。我无法这样做,因为只要我用java编写文件创建逻辑,而不是返回它,它就会在我的主机上创建一个文件 我已经尝试使用writer和output流将整个对象写入httpservletresponse,但它没有给出预期的结果。我从控制器返回了该对象,但它没有返回该对象,而是在我的主机上创建了一个文件,并且根本没有返回其他值 public class MyReturnObject { private Long countO

我试图创建一个rest控制器,它返回一个包含字符串、Long和csv文件的对象。我无法这样做,因为只要我用java编写文件创建逻辑,而不是返回它,它就会在我的主机上创建一个文件

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

public class MyReturnObject {
  private Long countOfRows;

  private File csvDataFile;

  private String errorMessage;
}
publicMyReturnObject创建MyReturnObject(列表值){
文件csvFile=新文件(“myinfo.csv”);
createNewFile();
FileWriter writer=新的FileWriter(csvFile);
编写(“测试”);
//几行
MyReturnObject returnObject=MyReturnObject.builder()
.countOfRows(x)
.csvDataFile(csvFile)
.errorMessage(y).build();
返回对象;
}

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

不幸的是,您不能同时得到两个响应。您可以将其设置为
text/csv
text/json
,并且可以一次返回一个响应正文


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

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

@RequestMapping(value = "/api/fetchInfo", method = RequestMethod.GET)
public @ResponseBody MyReturnObject fetchInfoRestControllerMethod (String param1) {
    return MyReturnObject.builder()
                                .countOfRows(x)
                                .csvDataFile(csvFile)
                                .errorMessage(y).build();
}

我没有可用的CSV,我需要在代码中创建它,因此我认为
Base64.encode
将不是合适的方法。您知道调用方方法(java fetch call)如何将字符串解释为csv文件吗?好的,如果您无法下载文件并将其作为json返回。但是,您可以在其中一个属性中返回带有csv的json对象,并在前端解析该属性,创建csv并将其发送给客户端。是示例之一,我无法理解在对象序列化之后如何保留csv文件以及如何序列化文件。
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;

}
@RequestMapping(value = "/api/fetchInfo", method = RequestMethod.GET)
public @ResponseBody MyReturnObject fetchInfoRestControllerMethod (String param1) {
    return MyReturnObject.builder()
                                .countOfRows(x)
                                .csvDataFile(csvFile)
                                .errorMessage(y).build();
}