Java 从spring rest控制器返回对象中的文件
我试图创建一个rest控制器,它返回一个包含字符串、Long和csv文件的对象。我无法这样做,因为只要我用java编写文件创建逻辑,而不是返回它,它就会在我的主机上创建一个文件 我已经尝试使用writer和output流将整个对象写入httpservletresponse,但它没有给出预期的结果。我从控制器返回了该对象,但它没有返回该对象,而是在我的主机上创建了一个文件,并且根本没有返回其他值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
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控制器返回类似objectMyReturnObject
的东西。请帮助我提出一些想法,以获得预期的结果。不幸的是,您不能同时得到两个响应。您可以将其设置为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();
}