SpringBoot中发送post⽂件上传请求
SpringBoot中发送post⽂件上传请求
SpringBoot中提供了请求处理的类——Restemple类
该类发送post请求主要分为以下⼏个步骤:
1. 建⽴restemple对象
2. 如有需求,设置请求头,通过HttpHeaders类进⾏设置
3. 设置请求体,通过LinkedMultiValueMap类,该类和HttpHeaders类⼀致,都是实现了MultiValueMap<k,v>接⼝,都是⼀键多值的结构
(即若存⼊相同键的键值对,会转化为该键对应若⼲值的列表)
4. 如果同时设置请求头和请求体,需要对请求进⾏装配HttpEntity<MultiValueMap<String,Object>>
若果没有设置请求头,则不需要装配请求,下⼀步直接发送请求体容器LinkedMultiValueMap类即可
5. 发送请求,通过restemple对象的postForObject()可以发送post请求,并返回响应体,将其反序列化为对应的类型,若想要返回
响应头和响应体的话,需要使⽤postForEntity()发送post请求
/**
*
* @param url
* @param data 请求体
* @param headers 请求头配置
* @param filePropertyName ⽂件的键名
* @param fileName ⽂件在表单提交的原名
* @param fileContentType 请求头⽂件类型
* @param fileData ⽂件⼆进制数组数据
* @param clazz 泛型的class
* @param <T>
* @return
*/
private static <T> T postFormData(
String url,
LinkedHashMap<String,String> data,
LinkedHashMap<String,String> headers,
String filePropertyName,
String fileName,
String fileContentType,
springboot结构
byte[] fileData,
Class<T> clazz
){
RestTemplate restTemplate = new RestTemplate();
//请求头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.parseMediaType(fileContentType));
//请求体容器,MultiValueMap是存储⼀键多值的结构
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
if(headers != null) {
httpHeaders.addAll(new LinkedMultiValueMap(headers));
}
//如果有填好的请求体,直接放⼊请求体容器中
if(data != null && data.size() != 0){
formData.addAll(new LinkedMultiValueMap(data));
}
if(fileData != null && fileData.length > 0){
ByteArrayResource byteArrayResource = new ByteArrayResource(fileData){
@Override
public String getFilename() {
return fileName;
}
};
formData.add(filePropertyName,byteArrayResource);
}
//HttpEntity 代表⼀个request请求或者响应,包含header和body
HttpEntity<MultiValueMap<String,Object>> files = new HttpEntity<>(formData, httpHeaders);
return restTemplate.postForObject(url, files, clazz);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论