昨天晚上做项目遇到了一个奇怪的问题,我用ajax提交一个form表单,后台Java方法用的是一个实体接,但是他根本不进方法体中,直接给我一个400的错误,一开始我以为是我路径的问题(尴尬),结果直接访问那个请求的@requestMapping发现没有问题,竟然进入了我的方法体中,这就可以说明两个问题了,第一个问题就是:跟我的请求地址没有关系,第二个问题就是肯定跟我的请求所带的参数有关系,上网查了一下资料,因为我的一次增加字段比较多,就用的是$("#fromId").serialize()的方法序列化参数,发现这种方法将所有的东西都变成了字符串,网上都说我的问题是因为传到后端的参数类型不符合,然后我就试了一下,只带一个字符型的参数直接请求地址,他竟然还不行,给我报错说不能够将null(就是我带的参数的那个字段)保存进入数据库,这下我不淡定了,我明明就将该字段当作参数带着了,又是一会的纠结,突然发现,我用的字段是大写的,而实体中的是小写,我就试了一下,他大爷的,过了,然后我就疯狂的该我的大小写,五十多个字段,手都快废了我,改好了怀着期待的心情点击保存,发现还是过不去,我想骂人了,想起来还有可能就是参数类型不符合,然后我就讲实体中的所有的date类型,int类型,bigdecimal类型的set方法的参数全部改成String,然后在方法体中给转换过来赋值,进过一番搜素,确定无误之后,再次点击保存,还是过不去,差点砸电脑了,一个保存用了我一个晚上,静下心我又将所有的参数给打印出来,用了最笨的方法,一个一个的试,看看到底是那些过不去,有事一番苦战,终于找到了让我奔溃的原因,在我刚才改变字段大小写的时候,因为字段太多,把某一个字段弄重复了。。。。。最后终于给搞好了。
虽然花费了我一个晚上的时间就搞了这么一个破东西,还是一个最简单的保存功能,但是我也学到了一点东西:
1、虽然程序员免不了经常用粘贴复制,但是一定要细心了,特别是在重复的粘贴复制时。
2、越是简单的东西用着就越要小心,不然他崩溃都不跟你说什么原因,直接给你一个400让你慢慢排查问题去。
3、form表单提交用实体接收时,需要将input或者select中的name属性的字符和实体中的字符完全保持一直包括大小写,不是和数据库中的字段保持一致。
4、form的序列化提交表单带过去的参数全都被序列化成了字符串类型,后端的字段类型如果是int、date等类型的需要手动将set方法给转换一下,转换方法上面一大堆中有。