springboot实现postman中form-data传参实现过程

 更新时间:2026年04月02日 09:26:49   作者:涛哥是个大帅比  
在项目场景开发中,对接需求要求使用POST请求传form-data数据,使用HttpClient请求时遇到了415错误,后改为restTemplate,封装参数时使用LinkedMultiValueMap对象以解决参数无法正确解析的问题

项目场景

开发中遇到对接需求时候,被要求用post请求传form-data数据的时候一脸懵逼,在postman中可以调用,但是程序中怎么调用呢。

问题描述

在postman中调用是没问题的

但是在程序中调用就报错了,之前用的是HttpClient的方式请求的

public StringBuffer caller(Map<String,String> map, String strURL) {
        // start
        HttpClient httpClient = new HttpClient();
 
        HttpConnectionManagerParams managerParams = httpClient
                .getHttpConnectionManager().getParams();
        // 设置连接超时时间(单位毫秒)
        managerParams.setConnectionTimeout(30000);
        // 设置读数据超时时间(单位毫秒)
        managerParams.setSoTimeout(120000);
 
        PostMethod postMethod = new PostMethod(strURL);
        // 将请求参数的值放入postMethod中
        String strResponse = null;
        StringBuffer buffer = new StringBuffer();
        // end
        try {
            //设置参数到请求对象中
            for(String key : map.keySet()){
                postMethod.addParameter(key, map.get(key));
            }
            
            int statusCode = httpClient.executeMethod(postMethod);
            if (statusCode != HttpStatus.SC_OK) {
                throw new IllegalStateException("Method failed: "
                        + postMethod.getStatusLine());
            }
            BufferedReader reader = null;
            reader = new BufferedReader(new InputStreamReader(
                    postMethod.getResponseBodyAsStream(), "UTF-8"));
            while ((strResponse = reader.readLine()) != null) {
                buffer.append(strResponse);
            }
        } catch (Exception ex) {
            throw new IllegalStateException(ex.toString());
        } finally {
            // 释放连接
            postMethod.releaseConnection();
        }
        return buffer;
    }

请求普通的接口没问题,但是第三方的接口会报错:415 Unsupported Media Type ,很明显是请求方式的问题,然后我在请求头加上了multipart/form-data,接口请求通了,但是报错参数错误,也就是接口没获取到参数。

postMethod.setRequestHeader("Content-Type", "multipart/form-data");

原因分析

form-data主要是以键值对的形式来上传参数,同时参数之间以&分隔符分开。

我就尝试利用map进行数据的的封装Map<String,String>,结果发现后台无法正确解析参数,是因为map封装后并不是以&链接的。

解决方案

最后利用spring来作为后端框架,form-data利用LinkedMultiValueMap对象来包装多个参数,参数以key-value形式,中间以&连接。

采用restTemplate代码的实现如下:

public String caller(Map<String,String> map, String strURL){
		HttpHeaders headers = new HttpHeaders();
		MultiValueMap<String, Object> map= new LinkedMultiValueMap<>();
		headers.add("Content-Type", "multipart/form-data");
	    //设置参数到请求对象中
        for(String key : map.keySet()){
        	map.add(key, map.get(key));
        }
		
		HttpEntity<MultiValueMap<String, Object>> requestParams = new HttpEntity<>(map, headers);
		ResponseEntity<String> response = restTemplate.postForEntity(apiUrl,requestParams,String.class);
		String result =response.getBody();
		return result;
}

最后没用HttpClient 的方式,改为了restTemplate的方式。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 服务器实现Java远程访问Linux服务器方式(JSch)

    服务器实现Java远程访问Linux服务器方式(JSch)

    文章介绍了如何使用Java远程访问Linux服务器,主要包括建立SSH连接、使用JSch库执行命令、解析返回值以及关闭连接的步骤
    2024-11-11
  • Java语言中Swing组件编程详解

    Java语言中Swing组件编程详解

    这篇文章主要为大家介绍了Java语言中Swing组件编程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java ThreadLocal有什么作用你知道吗

    Java ThreadLocal有什么作用你知道吗

    这篇文章主要为大家详细介绍了java ThreadLocal的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-09-09
  • 解决spring-boot-maven-plugin报红的问题

    解决spring-boot-maven-plugin报红的问题

    这篇文章主要给大家介绍一下如何解决spring-boot-maven-plugin报红的问题,文中通过图文讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-08-08
  • mybatis-plus 查询传入参数Map,返回List<Map>方式

    mybatis-plus 查询传入参数Map,返回List<Map>方式

    这篇文章主要介绍了mybatis-plus 查询传入参数Map,返回List<Map>方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java面试常见问题---ConcurrentHashMap

    java面试常见问题---ConcurrentHashMap

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment的结构和HashMap类似,是一种数组和链表结构,今天给大家普及java面试常见问题---ConcurrentHashMap知识,一起看看吧
    2021-06-06
  • springmvc利用jquery.form插件异步上传文件示例

    springmvc利用jquery.form插件异步上传文件示例

    本篇文章主要介绍了springmvc利用jquery.form插件异步上传文件示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • Java方法递归与输入输出深入探索

    Java方法递归与输入输出深入探索

    这篇文章主要介绍了Java方法递归与输入输出的相关资料,方法递归是一种在方法内部调用自身的技术,适用于具有递归结构的问题,输入输出是Java程序与外部世界交互的桥梁,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Spring Boot常用注解速查表(30个必会注解+实战案例)

    Spring Boot常用注解速查表(30个必会注解+实战案例)

    这篇文章主要介绍了Spring Boot常用注解速查表(30个必会注解+实战案例),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-03-03
  • 新手初学Java集合框架

    新手初学Java集合框架

    这篇文章主要介绍了JAVA集合框架的相关知识,文中讲解非常细致,帮助大家更好的理解学习JAVA框架,感兴趣的朋友快来了解下,希望能给你带来帮助
    2021-07-07

最新评论