首页 > 编程语言 >java 使用HttpClient发送post请求,参数包括MultipartFile、Map以及File转MockMultipartFile

java 使用HttpClient发送post请求,参数包括MultipartFile、Map以及File转MockMultipartFile

时间:2025-01-03 17:34:33浏览次数:6  
标签:Map java MockMultipartFile File builder file post multipartFile

     遇到使用java调用其他系统的http接口时,发送的参数中有文件,不太好处理,如下总结了发送带文件的的http方法,发送的文件还需要先将File 转成MockMultipartFile 否则接收会报错。

关键的代码和依赖如下所示。

一、依赖

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.10</version>
</dependency>
 
<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
 
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

<!-- File转MultipartFile使用 -->
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.1.8.RELEASE</version>
         <scope>compile</scope>
</dependency>

 二、File转MockMultipartFile

File file = new File("d://1//test.png");

try {
    // 创建 FileInputStream
    FileInputStream input = new FileInputStream(file);

    // 使用 MockMultipartFile 初始化 MultipartFile
    MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "audio/mpeg", input);
    httpUtil.sendPostRequest("http://×××××××/add", multipartFile, formData);
} catch (Exception e) {
    e.printStackTrace();
}

 

三、http的发送方法

public static void sendPostRequest(String url, MultipartFile multipartFile, Map<String, String> formData) throws IOException {
        // Create an instance of CloseableHttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // Create a HttpPost object and set the URL
            HttpPost post = new HttpPost(url);

            // Create a MultipartEntityBuilder to build the multipart form data
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();

            // Add form data fields to the builder
            for (Map.Entry<String, String> entry : formData.entrySet()) {
                builder.addTextBody(entry.getKey(), entry.getValue(), ContentType.create("text/plain", StandardCharsets.UTF_8));
            }

            // Add the file part to the builder
            builder.addBinaryBody("file", multipartFile.getInputStream(), ContentType.APPLICATION_OCTET_STREAM, multipartFile.getOriginalFilename());

            // Build the HttpEntity and set it to the HttpPost object
            HttpEntity entity = builder.build();
            post.setEntity(entity);

            // Execute the request and get the response
            try (CloseableHttpResponse response = httpClient.execute(post)) {
                // Process the response
                HttpEntity responseEntity = response.getEntity();
                if (responseEntity != null) {
                    String responseString = EntityUtils.toString(responseEntity);
                    System.out.println("Response: " + responseString);
                }
            }
        }
    }

 

标签:Map,java,MockMultipartFile,File,builder,file,post,multipartFile
From: https://www.cnblogs.com/yclh/p/18650612

相关文章

  • 【手把手-包教包会系列】java按模板多sheet导出Excel
    手把手带你java按模板多sheet导出Excel【包教包会系列】废话不多说直接撸代码1.引入依赖推荐使用3.2以上版本,原因是在性能上会有新的优化<!--easyExcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.......
  • 【Java 温故而知新系列】基础知识-04 重点关键字(面试经常遇到的)
    1、final 在Java中,final关键字可以用于变量、方法和类,分别赋予它们不同的语义和行为。以下是final关键字的主要作用修饰变量当final修饰一个变量时,表示该变量的值一旦初始化后就不能再被改变。这适用于基本类型和引用类型。基本类型:对于基本类型(如 int, double 等......
  • Java集合 —— ArrayList详解(源码)
    我这里阅读的是JDK17关于ArrayList的源码,不过思路都是一样的简介 ArrayList是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList继承了AbstractList,并实现了List接口。属性设置//序列化Idprivatestatic......
  • JavaMock批量生成GET SET方法单测覆盖率
    @RunWith(MockitoJUnitRunner.class)@Slf4jpublicclassPersonTest{@TestpublicvoidtestPerson(){MockGetSetMethod(Person.class);}/***@paramtClass需要生成覆盖率的实体类*@param<T>泛型*/public<T>......
  • delphi djson 类与JSON 互转,与 Java、Golang 一致写法
    前因为什么要开发这个JSON库?原因是delphi官方的json既没有处理null(也叫零值)的问题;举例说明吧:开发者往往需要类与JSON之间进行序列化和反序列化;接下来我们举个例子:Person{id:Int64;//IDname:string;//姓名desc:string;//描述}这样一个类在不......
  • java字符串拼接遇到null你会处理吗
    现有一个场景,对于发票信息,需要把信息中的地址和电话进行拼接,开户号和账号进行拼接,那应该怎么做?最简单的方法是使用+拼接,但问题是如果有个字段为空,是null,那么拼接结果是什么样的?来个下面的示例publicstaticvoidmain(String[]args){Stringa=null;String......
  • 静态变量:无法解析的外部符号 "public: static class cv::Mat (* utilities::rmap)[2]
    出现“无法解析的外部符号”错误通常是由于链接器找不到某个符号的定义。这种情况一般有几个可能的原因:1.符号未定义您可能在代码中声明了一个静态变量,但没有提供定义。比如,如果您在类中声明了一个静态成员变量,但没有在源文件中定义它,链接器就会报错。示例://utilities.hnam......
  • 深入理解 Java Set 集合:原理、应用与高频面试题解析
    深入理解JavaSet集合:原理、应用与高频面试题解析在Java中,Set是一种重要的集合接口,用于存储不重复的元素。无论是在实际开发中,还是在面试场景中,Set都是一个高频的知识点。本篇文章将详细介绍JavaSet集合的基础知识、常见实现类、应用场景以及面试常考题,最后通过总结帮助......
  • 利用JAVA爬虫获取item_search_img-按图搜索1688商品(拍立淘)接口
    引言在当今的电商领域,图像识别技术的应用越来越广泛,尤其是以图搜图功能,它极大地提高了用户的购物体验。本文将详细介绍如何利用JAVA爬虫技术获取1688商品的按图搜索接口,即拍立淘接口,实现商品的图像识别搜索。一、1688API接口概述1688作为阿里巴巴集团旗下的批发交易平台,提......
  • 酒店管理系统|Java|SSM|VUE| 前后端分离
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomca......