我需要实现可以发送响应或下载文件的API:
@GetMapping(value = "/download")
public ResponseEntity<?> downloadFile(
@RequestParam(value = "apiResponseType", required = true) String apiResponseType) throws IOException {
ValidationResponse response = null;
if (apiResponseType.equals("FILE")) {
String FILE_HEADER = "id,firstName,lastName,gender,age";
byte[] json = FILE_HEADER.getBytes();
Resource resource = new ByteArrayResource(json);
HttpHeaders headers = new HttpHeaders();
headers.setContentLength(resource.contentLength());
headers.setContentDispositionFormData("attachment", "test.csv");
return ResponseEntity.ok().headers(headers).contentType(MediaType.APPLICATION_OCTET_STREAM).body(resource);
} else {
response = new ValidationResponse();
response.setSuccess(true);
response.setMessage("TESTING");
return ResponseEntity.ok(response);
}
}
以上代码适用于“ELSE”案例。即,能够发送响应。 但是,如果我将“生成”添加到@GetMapping,如下所示,我可以下载文件但不能用于响应(在上面的代码中也是如此)(获得状态:406不可接受):
@GetMapping(value = "/downloadFile", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
任何人都可以帮我吗?
答案 0 :(得分:0)
您的问题有无效的假设,可以发送回复或下载文件&#39;。下载文件是发送响应的其他内容!对于API客户端来说没有区别。对于浏览器,如果浏览器建议将响应保存为文件或在浏览器窗口中显示响应,则只是实现细节。
答案 1 :(得分:0)
您是否在return ResponseEntity.ok(response).contentType(MediaType.TEXT_PLAIN);
分支上尝试了else
(并移除了produces
)?