糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > Spring MVC 接收POST表单请求 获取参数总结

Spring MVC 接收POST表单请求 获取参数总结

时间:2022-02-27 08:55:47

相关推荐

Spring MVC 接收POST表单请求 获取参数总结

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

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

spring 代码:

@RequestMapping(value="login.do",method=RequestMethod.POST)@ResponseBodypublicStringlogin(Stringusername,Stringpassword)throwsException{returnusername+":"+password;}

表单代码:

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

httpclient4.3发送post代码:

@TestpublicvoidtestMultipartPost()throwsIOException{HttpPosthttpPost=newHttpPost("http://localhost:8080/test/login.do");try{HttpClientBuilderhttpClientBuilder=HttpClientBuilder.create();CloseableHttpClienthttpClient=httpClientBuilder.build();RequestConfigconfig=RequestConfig.custom().setConnectTimeout(200000).setSocketTimeout(200000).build();httpPost.setConfig(config);MultipartEntityBuildermultipartEntityBuilder=MultipartEntityBuilder.create();multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));multipartEntityBuilder.addTextBody("username","taozi");multipartEntityBuilder.addTextBody("password","123");HttpEntityhttpEntity=multipartEntityBuilder.build();httpPost.setEntity(httpEntity);HttpResponseresponse=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编码上传,

@TestpublicvoidtestUrlencodedPost()throwsIOException{HttpPosthttpPost=newHttpPost("http://localhost:8080/test/login.do");try{CloseableHttpClientclient=HttpClients.createDefault();List<NameValuePair>params=newArrayList<NameValuePair>();params.add(newBasicNameValuePair("username","taozi"));params.add(newBasicNameValuePair("password","123"));HttpEntityhttpEntity=newUrlEncodedFormEntity(params,"UTF-8");httpPost.setEntity(httpEntity);CloseableHttpResponseresponse=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上下文配置

<beanid="multipartResolver"class="org.springframework.monsMultipartResolver"></bean>

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

如果觉得《Spring MVC 接收POST表单请求 获取参数总结》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。