getParameter()接收参数报错NullPointerException

一个空格引发的“惨案”

前期(我明明在表单里填数据了,为啥会是NPE呢)

在用getParameter()接收前端表单传过来的数据时报错NPE,刚好这个报错的地方是BigDecimal类型,我是第一次用这个类型,第一感觉是没用过这个类型,可能是String转BigDecimal时出错了,然后尝试强制转换,各种谷歌,连stackover的英文我都忍着看了!but,大约花了1h都没有解决,然后又搜索前端页面,怀疑是不是因为这个number类型的锅,然后导致了在各种String,BigDecimal,number转换的时候出了问题。尝试着找了一下里面到底是什么类型,但是又没有搞明白(其实前端我也是渣渣,哈哈哈)。

总之就是前期把重点放在了各种类型,以及类型转换上面,因为我在测试的时候前端的表单里我确实是填数据了,而且还尝试了int,double等各种类型,因为我填了数据,所以就忽略了数据是否真的传过来了的问题。而且报错是NPE,所以我就很不理解,我明明填数据了,为啥会是NPE呢。

中期(发现问题所在)

后来一位群友发现了我在接收参数的时候后面多了一个空格!附上聊天截图,对我而言简直就是段“艰辛的奋斗史”
getParameter()接收参数报错NullPointerException_第1张图片
getParameter()接收参数报错NullPointerException_第2张图片
经过测试之后发现,确实为空了
getParameter()接收参数报错NullPointerException_第3张图片

后期(探索问题本质)

好吧,这下找到问题了,但是为啥会为空呢,字符串后面加个空格就变为null了吗,我还特地测试了一下
getParameter()接收参数报错NullPointerException_第4张图片
发现,就算是字符串后面加个空格也是原样输出啊,为啥这里就算空呢?一番搜索无果后决定去看一下getParameter的官方api文档
getParameter()接收参数报错NullPointerException_第5张图片
连英文带翻译的看了一下,似乎没有我想要的答案,官方api都没有找到答案,难不成我要去看一下源码?看一下底层是怎么实现的?emmm,怎么有种我是大神的感觉,手动笑哭。后来还是万能的群友,一语惊醒梦中人!
getParameter()接收参数报错NullPointerException_第6张图片
getParameter()接收参数报错NullPointerException_第7张图片
getParameter()接收参数报错NullPointerException_第8张图片
我一直以为它会接收的值会是 “参数+空格”,没想到是去匹配“参数+空格”了,没有这个值,所以结果为空,终于搞懂了这个问题。
总之,还是要多动手,多写,遇到问题了多思考,我以前刷视频不少,但是没有咋动手写过,还是要多动手写才行。

后续

好奇心又让我把前端里的名称后面加了一个空格,这样看看能不能匹配到,第一次重启tomcat后还是Null,群友提示看了一下网页源代码,名称后面并没有空格,又重启了一次后可以匹配到数据了。网页源代码名称后面也多了一个空格。
getParameter()接收参数报错NullPointerException_第9张图片

你可能感兴趣的:(编程感悟,编程途中的那些bug,推荐,java,bug,javaee,后端)