我正在尝试创建一个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
的对象。请帮助我提出想法,以取得预期的结果。
答案 0 :(得分:1)
很遗憾,您不能同时有两个响应bodies。您可以将其设置为text/csv
或text/json
,并且一次可以返回一个响应正文。
但是,您可以将CSV转换为字节,然后Base64.enocode
并将其放入对象中。您还可以将CSV存储在字符串中,并通过自定义line separator返回。
答案 1 :(得分:0)
在您的项目中使用jackson库或gson序列化您的类MyReturnObject。
#headerSearch