Возврат файла в объекте из контроллера покоя пружины - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь создать контроллер отдыха, который возвращает объект, который содержит String, Long и CSV-файл.Я не могу сделать это, потому что, как только я пишу логику создания файла в Java, вместо того, чтобы возвращать его, он создает файл на моем хосте.

Я уже пытался записать весь объект в 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, не возвращает ожидаемый результат.Я думаю, возможно ли вернуть что-то вроде объекта MyReturnObject из контроллера покоя.Пожалуйста, помогите мне с идеями, чтобы получить ожидаемые результаты.

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

К сожалению, вы не можете иметь два ответа тел одновременно.Вы можете установить либо text/csv, либо text/json, и вы можете возвращать одно тело ответа за раз.

Однако вы можете преобразовать CSV в байты и Base64.enocode и поместить их внутрьобъекта.Вы также можете сохранить свой CSV в строку и вернуть его с пользовательским разделителем строк .

0 голосов
/ 21 сентября 2019

Сериализуйте свой класс MyReturnObject, используйте в своем проекте библиотеку Джексона или gson.

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