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......