
在SpringMVC web应用中,对于一个rest接口,获取请求参数我们一般使用 @requestParam 、 @requestBody 等注解 。对于表单类型的请求参数,有一下几种获取方式
前两种方式其实是一种方式,@requestParam底层就是利用requestgetParameter的原理。这两种方式有一个弊端就是只能一个个获取,而且必须知道对方传过来的参数的key值,如果想要一次性获取,可以使用requestgetInputStream方法获取一个inputStream对象,然后读取流里面的数据。
但在实际过程中,我们会发现通过requestgetInputStream()方式获取的数据为空。
这里的表单数据已经被填充到parameterMap中,不能再通过getInputStream获取。
如何解决这个问题呢。
在javaxservlet>
spring MVC controller获取前端传递的数组参数的方法是进行封装json字符串实现的。
1、jsp页面中的数组创建如下:
var myArray = []; 定义数组myArray
myArray push("OU=Software,DC=example,DC=com,"); 向数组中添加第一个字符串
myArray push("OU=IT,DC=example,DC=com,");向数组中添加第二个字符串
转换json数组:
myArray = JSONstringify(myArray ); 利用json的stringify方法把js对象转换成json对象
$("#ADOus")attr("action","${ctx}/ADSettingmyOUsArray ="+ myArray );设置action参数
$("#ADOus")submit();提交action到对应的controller
2、在controller层的处理如下:
@RequestMapping(value = { "/ADSetting" }, method=RequestMethodPOST) 定义url和提交方法,规定post
public String configureOUs(>
因为form表单的enctype编码方式不同导致的;enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x->
用过SpringMVC框架的小伙伴们都知道,@RequestParam就是用来处理入参的,但可能你会奇怪,平时不使用这个参数也可以获取到参数呀,加与不加都可以获取参数,是这样吗?
1、不添加@RequestParam注解
首先我们创建测试的控制器类,方法中添加一个参数name,此时参数没有添加@RequestParam注解,如下:
启动项目后,通过浏览器访问测试效果,不带参数则获取的参数为null,但页面可以正常显示,请求可以正常的执行,带上参数之后,参数可以正常的获取并打印出来了,如下:
2、添加@RequestParam注解,没有任何注解设置参数
再次启动项目后,通过浏览器访问查看效果,此时带上name参数页面可以正常显示并打印出结果值,但如图所示,不带参数的时候,页面报错,返回400,并提示name不存在,如下:
3、@RequestParam注解参数说明和使用
31、参数required表示该参数是否为必须要提交的,默认为true,即必须要提交的,如果没有提交该参数则会报错;false表示不是必须的,如果没有提交该参数不会报错。
此时参数required=true,name参数提交则正常显示,不提交则会报错,如下:
如果将参数改为required=false,name参数提交则正常显示,不提交则会显示null,不会报错
32、参数defaultValue用来在参数为空的情况下为该参数设置一个默认值,如果参数不为空,则正常获取参数值,如果为空,则参数值为该默认值,如下:
浏览器访问效果如下:
33、参数value是在提交的参数名和方法中接收参数的变量名不一致时使用,如果页面提交的参数名为inputName,而方法中定义的接收参数的变量名为name,此时就用到参数value了,如下:
4、此时我们会发现,@RequestParam注解加与不加参数都能正常获取到,那么接下来我们来修改一个eclipse的配置,再来看一下,修改的配置如下图:
我们将图中标出的这个配置取消勾选,保存修改后再启动项目,在没有添加@RequestParam注解和只是添加了@RequestParam注解,而没有添加注解的value参数时。
你会发现页面会报500错误,而eclipse同样也会报错,结果如下:
eclipse的该设置表示:将变量属性添加到生成的类文件里面;
当然在我们开发阶段不会去修改这些配置,不会出现问题,但是当项目发布到真实环境中,不知道它是如何编译的,配置是否相同,如果不同,那么系统将会出现问题,无法运行。所以为了养成良好的习惯,不给自己埋坑,在开发时将@RequestParam注解写上为好!
以上就是关于post方法 request.getInputStream()为空解惑全部的内容,包括:post方法 request.getInputStream()为空解惑、springmvc中读取配置文件中参数问题、spring MVC 怎么获取前端传递的数组参数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)