调用第三方接口实现单个文件下载,第三方接口地址https://ccm-uat.cmitry.com/march/march-contract/accessory/contractAccessory; 请求方式:GET; 请求头:Content-Type:application/json,Authorization, 请求参数:String id,String name,不要把请求参数拼接到url里, 响应报文:把IO流返回给前端。浏览器会自动提示保存并下载生成的文件,用Java的RestTemplate实现Controller层,帮我写并标注释,打印出入参日志
时间: 2023-03-31 10:00:37 浏览: 203
ThirdParty-5.x:OpenFOAM-5的第三方库编译脚本
好的,这是一个关于Java编程的问题,我可以回答。以下是Controller层的代码和注释:
```java
@RestController
@RequestMapping("/download")
public class DownloadController {
private static final Logger logger = LoggerFactory.getLogger(DownloadController.class);
@GetMapping("/file")
public ResponseEntity<Resource> downloadFile(@RequestParam String id, @RequestParam String name) {
// 打印入参日志
logger.info("下载文件的id为:{},文件名为:{}", id, name);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "your_authorization_token");
// 设置请求参数
Map<String, String> params = new HashMap<>();
params.put("id", id);
params.put("name", name);
// 发送请求并获取响应
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<byte[]> response = restTemplate.exchange(
"https://ccm-uat.cmitry.com/march/march-contract/accessory/contractAccessory",
HttpMethod.GET,
new HttpEntity<>(params, headers),
byte[].class);
// 把IO流返回给前端
ByteArrayResource resource = new ByteArrayResource(response.getBody());
// 返回响应
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + name)
.contentLength(response.getBody().length)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
}
```
注意:这里的Authorization需要替换成你自己的授权令牌。
阅读全文