2019独角兽企业重金招聘Python工程师标准>>>

前段时间遇到一个问题,在spring mvc 服务端接收post请求时,通过html 表单提交的时候,服务端能够接收到参数的值。但是使用httpclient4.3构造post请求,却无法接收到参数的值。

spring 代码:

    @RequestMapping(value = "login.do", method = RequestMethod.POST)@ResponseBodypublic String login(String username, String password) throws Exception {return username + ":" + password;}

表单代码:

<form action="http://localhost:8080/test/login.do" id="frm" method="post">name:<input type="text" name="username" id="username"/>   </br>psword:<input type="text" name="password" id="password"/>  </br><input id="submit" type="submit" /></form>

httpclient4.3发送post代码:

    @Testpublic void testMultipartPost() throws IOException {HttpPost httpPost = new HttpPost("http://localhost:8080/test/login.do");try {HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();CloseableHttpClient httpClient = httpClientBuilder.build();RequestConfig config = RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000).build();httpPost.setConfig(config);MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));multipartEntityBuilder.addTextBody("username", "taozi");multipartEntityBuilder.addTextBody("password", "123");HttpEntity httpEntity = multipartEntityBuilder.build();httpPost.setEntity(httpEntity);HttpResponse response = httpClient.execute(httpPost);System.out.println(EntityUtils.toString(response.getEntity()));} finally {httpPost.releaseConnection();}}

一直在查找原因,为什么通过httpclient4.3构造的post请求,服务端无法接收到传输的参数。比较与html的差异,发现httpclient构造的请求使用的是multipart形式。而表单上传使用的是默认形式的编码,x-www-form-urlencoded,所以表单能够成功。现在找到问题了,将httpclient的构造代码,改为x-www-form-urlencoded编码上传,

@Testpublic void testUrlencodedPost() throws IOException {HttpPost httpPost = new HttpPost("http://localhost:8080/test/login.do");try {CloseableHttpClient client = HttpClients.createDefault();List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("username", "taozi"));params.add(new BasicNameValuePair("password", "123"));HttpEntity httpEntity = new UrlEncodedFormEntity(params, "UTF-8");httpPost.setEntity(httpEntity);CloseableHttpResponse response = client.execute(httpPost);System.out.println(EntityUtils.toString(response.getEntity()));} finally {httpPost.releaseConnection();}}

现在服务端能够正常的接收到请求了,现在总结一下表单两种编码的形式

application/x-www-form-urlencoded   空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值

multipart/form-data    不对字符进行编码,使用二进制数据传输,一般用于上传文件,非文本的数据传输。

spring mvc如果要接收 multipart/form-data 传输的数据,应该在spring上下文配置

<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">       </bean>

这样服务端就既可以接收multipart/form-data 传输的数据,也可以接收application/x-www-form-urlencoded传输的文本数据了。

转载于:https://my.oschina.net/u/1982377/blog/537967

Spring MVC 接收POST表单请求,获取参数总结相关推荐

  1. spring mvc 接收页面表单List

    很少写博客,如果写的不好请多多包涵! 最近在用Spring mvc时遇到一个问题,在网上搜了很多资料.几乎没看到解决办法! 例如:当我们在做批量添加或者更新时,在Controller层接收表单数据的问 ...

  2. Spring MVC数据绑定和表单标签的应用(附带实例)

    为了让读者进一步学习数据绑定和表单标签,本节给出了一个应用范例 springMVCDemo04.该应用中实现了 User 类属性和 JSP 页面中表单参数的绑定,同时在 JSP 页面中分别展示了 in ...

  3. ios 优化html表单提交,iOS 使用AFNetworking的form表单请求

    首先说明下form表单请求,是一种特殊的post请求,请求方式有application/x-www-form-urlencoded.multipart/form-data.application/js ...

  4. Django之--POST方法处理表单请求

    上一篇:Django之--MVC的Model 演示了如何使用GET方法处理表单请求,本文讲述直接在当前页面返回结果,并使用更常用的POST方法处理. 一.首先我们修改下page.html <!D ...

  5. FastAPI从入门到实战(11)——表单请求与上传文件

    本文主要记录表单的数据请求以及上传不同大小的文件.上传多个文件.获取文件信息等相关内容. 表单请求 @app07.post("/stu07/form") def stu07_for ...

  6. laravel 的 表单请求

    在对文章.帖子等信息进行创建.更新的时候,需要进行表单验证的时候,一般我们使用Request来获取输入的值来进行验证,这样需要在每一个方法中进行书写验证规则. laravel 提供了创建表单请求,我们 ...

  7. 将表单请求提交到本页

    在Web应用程序中,有时需要将表单请求提交到本页进行处理 实现将表单提交到本页,只要将表单的action属性设置为本页即可,假定表单页为index.jsp ,那么action的值为index.jsp, ...

  8. abap视图字段限制_在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式.很多 Web 框架都对此功能专门提供了工具集,Lara ...

  9. post multipart/form-data 类型表单如何获取File外其他参数

    参考资料: post multipart/form-data 类型表单如何获取File外 其他参数:https://www.douban.com/note/536231506/ multipart/f ...

最新文章

  1. MySQL存储结构的使用
  2. 漫画:程序员相亲?哈哈哈哈哈哈
  3. 放大镜_屏幕放大镜怎么样使用方法
  4. 呆萌的图模型学习——使用networkx计算node2vec,得到节点与边的embedding(三)
  5. JavaScript之基础语法整理
  6. 苹果手机处理器_全球最强手机处理器诞生!苹果A14主频首超3GHz:性能秒杀华为/高通...
  7. Word 统一修改 Mathtype尺寸
  8. 【分享】豆瓣上排名top100的书籍
  9. 安装microsoft office 和visio遇到的那些事儿
  10. 高等数学:极限与连续
  11. 《创世纪语录》1、只要有梦想,什么都能够实现。3、做得越多机会越多。
  12. 中职生学云计算机技术应用,云课堂在中职计算机课程教学中的应用
  13. 建模练习——扇贝单词
  14. Python递归函数返回阶乘
  15. es6转es5的在线工具
  16. HTTP协议详解(三)
  17. 没有sln文件怎么打开
  18. python爬虫之逆向破解_这种python反爬虫手段有点意思,看我怎么破解
  19. 北斗三号频点_北斗三代B2a频点软件接收机的设计
  20. 西门子南京计算机,西门子(南京)实习面试经历

热门文章

  1. 数据在内存中的大小端模式存储
  2. 【C/C++】与const有关的指针类型赋值
  3. 没有APP经验的运营者,怎么做好APP推广
  4. 百度万人协同规模下的代码管理架构演进
  5. 这个沙盒游戏建立在数字时代,你能通关吗?
  6. Delphi多媒体设计之播放WAVE文件(API)
  7. 北京思源培训中心---C#下用P2P技术实现点对点聊天(2)
  8. 设计Whats App
  9. 11 、图解2个node环境下replica shard是如何分配的
  10. php mysql中华图书购物商城