spring boot实现postman中form-data传参方式

这篇具有很好参考价值的文章主要介绍了spring boot实现postman中form-data传参方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

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


问题描述

在postman中调用是没问题的

spring boot实现postman中form-data传参方式

 但是在程序中调用就报错了,之前用的是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的方式。文章来源地址https://www.toymoban.com/news/detail-511814.html

到了这里,关于spring boot实现postman中form-data传参方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Okhttp实现参数请求接口用postman的form-data请求接口

    1.看下图,是不是这种访问方式 2.如果是这种访问方式,使用okhttp请求接口是这样的。

    2024年02月04日
    浏览(45)
  • 用java实现模仿 Postman 发送 form-data 形式的请求,并指定编码格式

    可以使用 Apache HttpClient 库来模仿 Postman 发送 form-data 形式的请求,并指定编码格式。以下是一个示例代码: 在这个示例中, YOUR_ENDPOINT_URL 应该被替换为目标 URL。这段代码使用了 Apache HttpClient 库创建了一个带有 form-data 的请求,并使用 UrlEncodedFormEntity 设置了编码格式为 UTF-

    2024年02月02日
    浏览(56)
  • 【使用multipart/form-data方式传递MultipartFile参数,实现服务间文件的传递】

    目录 一、代码实现 二、MultipartFile工具类 三、HttpClient使用 四、参考链接 一、代码实现 1、A服务接收前端上传文件并发送至B服务 引入依赖 使用MultipartFile接收前端文件 调取第三方接口,发送 MultipartFile 文件 2、B服务接收文件 二、MultipartFile工具类 简介:MultipartFile是SpringMV

    2024年02月12日
    浏览(48)
  • postman上传文件(multipart/form-data请求)

    网页的form表单中,如果存在上传文件的表单,则需要将form标签设置enctype=\\\"multipart/form-data\\\"属性,意思是将Content-Type设置成multipart/form-data。 那么如何使用 postman发送 multipart/form-data请求呢? Content-Type: multipart/form-data; boundary= 表单中的 enctype 属性规定在发送到服务器之前应该如

    2024年02月02日
    浏览(71)
  • Postman form-data、x-www-form-urlencoded的区别

    我们在平时的postman请求调试,以及web的http请求开发时,常常能看到以下几种传参的形式 form-data、x-www-form-urlencoded、raw、binary,那么这些请求方式的区别是什么呢? 1 、 form-data: 就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开

    2024年01月24日
    浏览(47)
  • postman中 form-data、x-www-form-urlencoded、raw、binary的区别

    multipart/form-data:可以上传文件,以及表单键值对,最后会转化为一条信息; x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的。 raw:可以上传任意格式的文本,可以上传text、json、xml、html等 1、form-data: 就是http请求中的 multipart/form-data ,它会将表单的数据处理为

    2024年03月24日
    浏览(44)
  • 使用postman发送请求,提示Content type ‘multipart/form-data not supported

    1、原因:后端通过@RequestBody 的方式接收参数,不能通过form-data方式传参,每一个请求必须是通过实体对象进行传参,需要改为使用json传参

    2024年01月22日
    浏览(52)
  • post请求设置表单form-data格式的几种方式

    我用默认的post方法发送数据的时候发现后端获取不到数据,然而在network中看到参数是的确传出去的了。而且用postman测试的时候也是可以的,比较了下两个的不同发现是postman使用的是form-data格式,于是用form-data格式再次请求,发现OJBK 这两种格式都是无法使用的:   方法一:

    2024年02月11日
    浏览(68)
  • 使用postMan调试接口出现 Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

    最近好久没写springboot项目了,然后写了一个添加用户的接口,使用postman测试时出现了问题。如下图: org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘multipart/form-data;boundary=--------------------------121447464228391674964565;charset=UTF-8’ not supported 原因是接口做了规范,默认就是

    2024年02月04日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包