Spring mvc :Required String parameter 'oid' is not present

环境:Spring 4.3.1

Spring mvc :Required String parameter 'oid' is not present

通过Postman进行测试时提示出错Spring mvc :Required String parameter 'oid' is not present

 

Spring mvc :Required String parameter 'oid' is not present

出现这个问题感到很奇怪,在另外一个项目中也是进行如此的使用,都没有出现这种情况,也是通过同样的方式进行接口测试。

通过查看RequestParamMethodArgumentResolver (该类支持带有@RequestParam注解的参数或带有MultipartFile类型的参数)的源码发现最终还是通过request进行参数获取

Spring mvc :Required String parameter 'oid' is not present

而顺着源码往下看在RequestFacade  类中的parseParameters方法进行参数解析

Spring mvc :Required String parameter 'oid' is not present

但该方法有进行请求头判断,如果是multipart/form-data类型话,就直接跳出就不会进行参数获取。

这个时候突然想到在spring中进行文件上传需要配置CommonsMultipartResolver,于是配置后再看源码

发现是通过DefaultMultipartHttpServletRequest进行参数获取,这样就能获取到参数。再看另外一个项目果然有配置,所以能够访问。

 

一般通过浏览器进行请求时contentType为application/x-www-form-urlencoded,当文件上传时为multipart/form-data类型,这次出现这个问题就是由于自己粗心没有注意到这个细节,导致浪费了时间。

一般出现这种问题可以通过以下两个方面进行判断:

1 检查参数是否存在(如果不是必须参数可通过

Spring mvc :Required String parameter 'oid' is not present

进行申明)

2 检查请求头contenType类型默认post请求为application/x-www-form-urlencoded,如果请求头为multipart/form-data(文件上传的话,需要配置spring的CommonsMultipartResolver)

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/luckyi/blog/737660