我在 Spring MVC 控制器中遇到了一个关于 StreamingReponseBody 的奇怪问题。简单的控制器代码:
@RestController
public class ServerController {
@GetMapping("test")
StreamingResponseBody test(HttpServletResponse response) {
response.setContentType("text/csv");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"test.csv\"");
return outputStream -> {
for (int i = 0; i < 5000; i++) {
outputStream.write("Hello".getBytes());
outputStream.write("\n".getBytes());
}
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (true) {
throw new RuntimeException("wrong");
}
for (int i = 0; i < 5000; i++) {
outputStream.write("Hello2".getBytes());
outputStream.write("\n".getBytes());
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
再加上一个控制器建议:
@ControllerAdvice
public class CustomControllerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleInternalServerError(Exception …Run Code Online (Sandbox Code Playgroud)