从SpringBoot方法返回几个部分的响应

时间:2018-03-23 15:52:22

标签: java spring spring-mvc spring-boot

现在我有一个在SpringBoot中正常工作的方法。它接收一个POST参数,对其进行一些处理,并返回一个字符串结果(不使用模板)。

顺便说一下,我并不完全确定我是否正确设置了方法签名,但正如我所说它确实有效:

@RequestMapping(value = "/", method = RequestMethod.POST)
@SuppressWarnings("unchecked")
@ResponseBody
String processFile(@RequestParam("myinput") MultipartFile file, HttpServletResponse response) throws IOException {

    // do some processing
    String myresponse = 'yadayada';
    return myresponse;
}

我将开始处理更大的文件,因此我希望将字符串myresponse分成几部分。因此,对于字符串part1 part2 part3,我可能会立即将part1返回给客户端,然后10秒后返回part2,然后返回part3后15秒。

然而,如果没有一些变化,这将无法工作,因为现在只有一个单一的return声明。您认为最好的方法是什么?我已经看过一些Q& A关于"返回一个流"但是对Java和Spring Boot不熟悉我不确定"返回一个流对象"并且"实际响应是流式传输,即多个部分"

1 个答案:

答案 0 :(得分:0)

答案其实很简单。只需在响应上直接获取PrintWriter,并在数据可用时使用它来编写和刷新数据。我不认为这会让我利用模板,但除此之外它还可以。

@RequestMapping(value = "/", method = RequestMethod.POST)
@SuppressWarnings("unchecked")
@ResponseBody
String processFile(@RequestParam("myinput") MultipartFile file, HttpServletResponse response) throws IOException {
    PrintWriter printWriter =  response.getWriter();
    printWriter.println("a");
    printWriter.flush();
    TimeUnit.SECONDS.sleep(20);
    printWriter.println("b");
    printWriter.flush();
}