RestTemplate篇

POST请求远程服务:

        //par请求报文     
        HashMap par = new HashMap();

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));
        headers.add("Accept", "application/json");
        headers.add("Content-Type", "application/json; charset=UTF-8");
        headers.add("Accept-Encoding", (String)null);
        HttpEntity<String> httpEntity = new HttpEntity(JSONObject.toJSONString(par), headers);
        RestTemplate rst = new RestTemplate();
        ResponseEntity<String> stringResponseEntity = rst.postForEntity(url, httpEntity, String.class, new Object[0]);

 

 

 

 

 

下载文件(非大文件):

调用远程接口,并将获取到的流转化成MultipartFile,代码如下:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Cookie","Cookie");
HttpEntity<String> httpEntity = new HttpEntity<>(headers);
ResponseEntity<byte[]> obj = restTemplate.exchange(URL, org.springframework.http.HttpMethod.GET,httpEntity,byte[].class);
byte[] fileByte = obj.getBody();

//fileName 备注:该位置的是将服务方的编码规则调换,以相反的规则转换,否则会是乱码。
String fileName = obj.getHeaders().getContentDisposition().getFilename();
fileName = new String(fileName.getBytes("iso-8859-1"), "UTF-8");

InputStream inputStream = new ByteArrayInputStream(fileByte);
MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);

备注:

文件下载文件时,是将文件加载到内存中,但遇到大文件时,可能会出现OutOfMemoryError,这个时候我们就需要用下面的方法,在读取 response 块时,直接保存到文件中。

 

下载文件(大文件-无需恢复的下载)

// 设置header
LinkedMultiValueMap<String, String> hd = new LinkedMultiValueMap<>();
hd.put("Cookie", Collections.singletonList("AUTHSESSION=0ea646ee-832d-46e9-94dc-5e36f79c6170; SERVERID=4b77fbc0af74a644d228e7fb3d9a187e|1622201231|1622201201"));
JSONObject json = new JSONObject();
HttpEntity<String> request = new HttpEntity<String>(json.toString(), hd);
RestTemplate restTemplate = new RestTemplate();
RequestCallback requestCallback = restTemplate .httpEntityCallback(request, JSONObject.class);
ResponseExtractor<ResponseEntity<JSONObject>> responseExtractor = restTemplate .responseEntityExtractor(JSONObject.class);


//对响应进行流式处理而不是将其全部加载到内存中
restTemplate .execute(URL, HttpMethod.GET, requestCallback, clientHttpResponse -> {

String fileName = clientHttpResponse.getHeaders().getContentDisposition().getFilename();
fileName = new String(fileName.getBytes("iso-8859-1"), "UTF-8");

Files.copy(clientHttpResponse.getBody(), Paths.get(uploadpath+fileName));
return null;
});

 

下载文件(大文件-可暂停和恢复的下载)

 

 

 

 

持续维护-ing......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值