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,
            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);
    }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南窗木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值