SpringBoot框架使用restTemplate带头信息和Body去下载文件

介绍

使用springboot框架,使用restTemplate去发送http请求下载文件,带头信息和json报文内容。

示例

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
/**
 * 带头信息、body的文件下载
 *
 * @author jianghao
 */
@RestController
@RequestMapping("/file")
public class FileOperationController {

    private final RestTemplateBuilder restTemplate;

    public FileOperationController(RestTemplateBuilder restTemplate) {
        this.restTemplate = restTemplate;
    }

    /**
     * 下载文件
     */
    @GetMapping("/download")
    public void downloadFile(){

        try {
            // JSON数据
            String data = "{\"infno\":\"9102\",\"msgid\":\"P4301020103820210510111608244\",\"insuplc_admdvs\":\"431102\",\"mdtrtarea_admvs\":\"431102\",\"recer_sys_code\":\"DHCC\",\"cainfo\":\"\",\"dev_no\":\"\",\"dev_safe_info\":\"\",\"signtype\":\"SM3\",\"infver\":\"V1.0\",\"opter_type\":\"1\",\"opter\":\"1\",\"opter_name\":\"demo\",\"inf_time\":\"2021-05-10 11:16:08\",\"fixmedins_code\":\"H43112900275\",\"fixmedins_name\":\"江华瑶族自治县第一人民医院\",\"sign_no\":\"193\",\"input\":{\"fsDownloadIn\":{\"file_qury_no\":\"M00/00/01/CloAOmCc4KCANS8tAAAB201aOdE6910323\",\"filename\":\"202105139172706019957799951.txt.zip\",\"fixmedins_code\":\"H43112900275\"}}}";

            restTemplate.build().execute(
                    "http://39g35124f0.wicp.vip/power-csb/powercsb/9102",
                    HttpMethod.POST,
                    clientHttpRequest -> {
                        //加入头信息
                        HttpHeaders headers = clientHttpRequest.getHeaders();
                        headers.add("Content-Type","text/plain");
                        headers.add("User-Agent","PostmanRuntime/7.28.0");
                        headers.add("Accept","*/*");
                        headers.add("Host","39g35124f0.wicp.vip");
                        headers.add("Accept-Encoding","gzip, deflate, br");
                        headers.add("Connection","keep-alive");
                        headers.add("Content-Length","754");
                        headers.add("Cookie","XSRF-TOKEN=b5bc59d7-da08-48ac-b50c-c44552f88c3f");
                        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_OCTET_STREAM));

                        // 加入Body的JSON内容
                        clientHttpRequest.getBody().write(data.getBytes(StandardCharsets.UTF_8));
                    },
                    clientHttpResponse -> {
                        // 下载文件存放的地方
                        File file =new File("G:\\202105139172706019957799951.txt.zip");
                        StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(file, true));
                        return file;
                    });
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}
Spring Boot中使用RestTemplate方法来进行HTTP请求非常简单。以下是一个示例: 1. 首先,确保在你的Spring Boot项目中添加了相关依赖。在你的 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 2. 在你的代码中创建一个 `RestTemplate` 实例。你可以在需要使用的地方注入它,或者通过使用 `new RestTemplate()` 进行实例化。 ```java @Autowired private RestTemplate restTemplate; ``` 3. 使用 `RestTemplate` 的方法发送HTTP请求。这里有一些常见的示例: ```java // GET 请求 String response = restTemplate.getForObject(url, String.class); // POST 请求 String requestBody = "{\"name\":\"John\", \"age\":30}"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> entity = new HttpEntity<>(requestBody, headers); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, entity, String.class); String response = responseEntity.getBody(); // PUT 请求 restTemplate.put(url, request, urlVariables); // DELETE 请求 restTemplate.delete(url, urlVariables); ``` 这只是一些常见的请求示例。根据你的需求,你可以使用更多的 `RestTemplate` 方法来发送不同类型的请求。还可以使用拦截器、错误处理器等进行更高级的配置和处理。 可以通过在 `application.properties` 或 `application.yml` 文件中配置 `RestTemplate` 的属性来进行更多的自定义设置。例如,设置连接超时时间、代理等。 ```yaml spring: restTemplate: requestConnectTimeout: 5000 requestReadTimeout: 5000 ``` 希望这可以帮助到你在Spring Boot中使用RestTemplate方法。如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值