调用第三方接口实现单个文件下载,第三方接口地址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-29 09:04:40 浏览: 127
好的,这是一个关于Java RestTemplate实现单个文件下载的问题。我可以回答这个问题。
以下是Controller层的代码实现,已经标注了注释,并打印了入参日志:
```java
@RestController
public class DownloadController {
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile(@RequestParam String id, @RequestParam String name) {
// 打印入参日志
log.info("Download request received. id={}, name={}", id, name);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "your_authorization_token_here");
// 设置请求参数
Map<String, String> params = new HashMap<>();
params.put("id", id);
params.put("name", name);
// 创建RestTemplate对象
RestTemplate restTemplate = new RestTemplate();
// 发送GET请求,获取响应报文
ResponseEntity<byte[]> response = restTemplate.exchange(
"https://ccm-uat.cmitry.com/march/march-contract/accessory/contractAccessory",
HttpMethod.GET,
new HttpEntity<>(headers),
byte[].class,
params
);
// 把响应报文的IO流返回给前端
ByteArrayResource resource = new ByteArrayResource(response.getBody());
// 返回ResponseEntity对象,浏览器会自动提示保存并下载生成的文件
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + name + "\"")
.body(resource);
}
}
```
阅读全文