最近在开辟时碰到一个非常新鲜的题目,在tomcat8中运用Spring MVC框架,在Controller中的要领参数没法平常猎取到响应的值,将tomcat版本换成7.0就处理了。
纪录以下处理历程,先上图:
项目采纳ssm架构,在这里猎取不到参数password的值,在网上查询相干材料,获得以下几种处理办法,但都没有什么效果:
1.运用@RequestParam注解
给password参数加上了RequestParam注解后,调试依旧没法猎取到password的值,将required的值改成true,直接报错了,毛病的意义就是缺乏password参数,但是明显传了参数的啊,为何还说缺乏参数呢,岂非是没可以辨认到我传的参数?这时刻斟酌到多是传参体式格局的题目。更改了一下传参体式格局,将password的值附加到url背面,就像GET要求那样传参。果真是这个缘由,参数的值可以吸收到了。不过运用这类传参体式格局,不加RequestParam注解也可以吸收到参数的值。虽然这类要领可以吸收吸收到参数的值了,但我没法忍受POST的这类传参体式格局,因而接着寻觅下一个要领
2.运用@RequestBody注解
RequestBody看字面意义就是要求的body,我在要求的时刻确实是将参数放到body内里通报过去的,看到这个注解以为貌似看到了愿望一样,因而如饥似渴的重启tomcat,然后用Postman挪用,此次直接断点都不进了,直接报了一个非常:
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public boolean com.scdq.manager.controller.SystemController.login(java.lang.String)
非常的也许意义就是缺乏必要的要求body,经由过程查询相干材料,发明RequestBody并不能这么用,需用建立一个类,在类中定义相干的参数,然后再将这个类作为RequestBody注解的参数的范例
根据这类体式格局修正好了代码,再次重启tomcat,运用Postman挪用,然后再次报了一个非常:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' not supported
非常的也许意义就是不支持content type为application/x-www-form-urlencoded这类范例,平常经由过程表单提交的数据默许就是这类范例,猜想多是RequestBody注解的缘由,因而又换了一种传参体式格局:运用JSON花样通报数据
运用这类传参体式格局,果真可以吸收到参数的值了,不过吸收参数的体式格局和传参体式格局都变得复杂了。这个项目是我从公司拷回家继承写的,在公司的时刻调试一切平常,回家就不行了,百思不得其解,一样的代码,改都没悛改,为何回到家就出题目了呢?既然代码都是一样的,运转效果不一样,那就只能申明运转的环境发生了转变。那末究竟是那里的环境不一样呢?出了这类题目,起首斟酌数据库的构造,不过家里电脑数据库版本和公司电脑是一致的,而且数据都是从公司直接拷返来的,所以直接消除数据库的缘由,更何况这是在Controller中吸收不到参数,还没有到接见数据库的那一步,就更不可能与数据库有关系了,所以直接消除数据库的缘由。因为项目是由maven构建的,相干的jar包都是maven自动去下载的,因而疑心会不会是maven自动下载下来的jar包有题目,然后把当地堆栈的jar包悉数删除,让maven从新去下载,就如许反复了频频,题目依旧存在,不得已只好临时消除maven的缘由。末了着实想不到其他的缘由了,便最先疑心tomcat的缘由,公司tomcat是7.0版本的,家里的tomcat是8.0版本的,虽然两个tomcat版本不一致,不过并没有下意识就以为肯定是tomcat版本的缘由,毕竟潜意识里以为8.0肯定是7.0以后功用的升级。虽然如许想,但照样抱着死马当活马医的心态去测试,在tomcat官网下载7.0版本的压缩包,然后配好响应的环境,用postman挪用,效果就是这么不测,参数值猎取到了?!!! 还真是tomcat版本的缘由?这以为也太坑了吧。。。。看来自觉的寻求高版本并非一件功德【相干引荐:Java教程】
以上就是Spring MVC不能平常猎取参数的值的处理要领(附代码)的细致内容,更多请关注ki4网别的相干文章!