使用RestTemplate发送POST请求
2019-07-31 本文已影响0人
茶还是咖啡
举个栗子
要访问的接口如下:
简要描述:
- 调用第三方文件上传服务
请求URL:
${baseUrl}/file
请求方式:
- POST
header
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
app | 是 | string | 接入的应用名称 |
time | 是 | string | 当前时间戳 |
sign | 是 | string | MD5(appToken+time) |
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
multipartFile | 是 | MultipartFile | 文件对象 |
bucketName | 是 | String | 存储桶的名称 |
返回示例
{
"code": 200,
"message": "success",
"data": {
"url": "https://object-storage/6407740fbe5242fe94c5b72df5270f871550485315792.jpg"
}
}
POST
private String uploadToServer(File file) {
//设置验签用的数据
String timestamp = String.valueOf(System.currentTimeMillis());
String sign = MD5Util.encode(appToken + timestamp);
//设置请求头
HttpHeaders headers = new HttpHeaders();
headers.add("app", appName);
headers.add("time", timestamp);
headers.add("sign", sign);
//设置content-type
MediaType type = MediaType.parseMediaType("multipart/form-data");
headers.setContentType(type);
//设置请求体
FileSystemResource fileSystemResource = new FileSystemResource(file);
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("file", fileSystemResource);
form.add("bucketName", bucket);
//用HttpEntity封装整个请求报文
HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
//服务端返回的json格式:"
String result = restTemplate.postForObject(url, files, String.class);
//将服务端发送过来的json转换成map
Map mapTypes = JSON.parseObject(result);
if ((Integer) mapTypes.get("code") == 200) {
JSONObject data = (JSONObject) mapTypes.get("data");
return data.getString("url");
}
return null;
}