%引发的Bug
2016-04-12 14:42
162 查看
前几天,因为项目要求,需要用Java程序模拟HTTP请求。接收的服务端是用SpringMVC来写的,是通过参数对象映射将属性自动填充。一开始还是比较顺利的,也顺利地将数据发了出去,可最后检查的时候发现,有一部分的数据并没有完全接受到。
如图:
通过Debug方式得到的详情,发现,其他的属性都是完好的填充起来了,但是只有这个infoCPU的属性还没有自动填充。
我在Java程序中是传递一个Map,Map中的值都是一些JSON字符串,一开始以为只是Java程序的问题,但是仔细想想,其他数据都是没有问题的,说明问题的所在并不在Java程序这一端。
然后,想想会不会是JSON数据的问题,也就是infoCPU这一个JSON数据的问题。我试了试:
Debug一下之后发现:
数据是有的!!!!!
这下,问题就清楚多了,关键在于这一段的JSON。
这时我想到,会不会有报错的Log。一看发现还真的有,报错的日志是这么写的:
这个错误就更加让我明确,问题就是在JSON当中。这个错误是说,字符转码失败,导致被SpringMVC给无视掉了,所以这个属性自然就是null。
于是接着看了看我这段JSON:
一开始还没有看到,看了好久才发现:(不过机智的各位看了我的标题应该也知道问题的所在了吧)
问题的关键就在这里,我赶紧将%全部替换掉
再次Debug,如图:
这些终于有数据啦,(^__^) 嘻嘻……
对于%,一般来说,是用在URL中对于字符的一个替换,指定特殊字符,比较常见的就是%20,在现实中是空格的意思。在上面的JSON数据中,因为存在百分数,自然就存在%。正是因为这个的存在才会影响转码之后无法被SpringMVC所接收。
关于网络传输中编码与转码的关系,大家可以参考这篇文章:
http://blog.csdn.net/zhh521125/article/details/6627245
这是我在项目中遇到的一个小插曲,虽然事后觉得没什么的,但是我觉得,耐心地发现问题,寻找问题,解决问题的思路还是值得深思的,与大家共勉。
有什么想法的都欢迎来留言~(≧▽≦)/~
如图:
通过Debug方式得到的详情,发现,其他的属性都是完好的填充起来了,但是只有这个infoCPU的属性还没有自动填充。
我在Java程序中是传递一个Map,Map中的值都是一些JSON字符串,一开始以为只是Java程序的问题,但是仔细想想,其他数据都是没有问题的,说明问题的所在并不在Java程序这一端。
然后,想想会不会是JSON数据的问题,也就是infoCPU这一个JSON数据的问题。我试了试:
map.put("infoCPU", "infoCPU");
Debug一下之后发现:
数据是有的!!!!!
这下,问题就清楚多了,关键在于这一段的JSON。
这时我想到,会不会有报错的Log。一看发现还真的有,报错的日志是这么写的:
Character decoding failed. Parameter [infoCPU] with value [...] has been ignored. Note that the name and value quoted here may be corrupted due to the failed decoding. Use debug level logging to see the original, non-corrupted values.
这个错误就更加让我明确,问题就是在JSON当中。这个错误是说,字符转码失败,导致被SpringMVC给无视掉了,所以这个属性自然就是null。
于是接着看了看我这段JSON:
{ "infoCPUDetails": [ { "mhz": 1796, "vendor": "Intel", "model": "Core(TM) i5-3337U CPU @ 1.80GHz", "cacheCount": -1, "userRadio": "21.9%", "systemRadio": "0.0%", "waitRadio": "0.0%", "errorRadio": "0.0%", "freeRadio": "78.0%", "totalUse": "21.9%" } ] } ... 其余的JSON数据就不展示了。
一开始还没有看到,看了好久才发现:(不过机智的各位看了我的标题应该也知道问题的所在了吧)
%
问题的关键就在这里,我赶紧将%全部替换掉
.replaceAll("%","");
再次Debug,如图:
这些终于有数据啦,(^__^) 嘻嘻……
对于%,一般来说,是用在URL中对于字符的一个替换,指定特殊字符,比较常见的就是%20,在现实中是空格的意思。在上面的JSON数据中,因为存在百分数,自然就存在%。正是因为这个的存在才会影响转码之后无法被SpringMVC所接收。
关于网络传输中编码与转码的关系,大家可以参考这篇文章:
http://blog.csdn.net/zhh521125/article/details/6627245
这是我在项目中遇到的一个小插曲,虽然事后觉得没什么的,但是我觉得,耐心地发现问题,寻找问题,解决问题的思路还是值得深思的,与大家共勉。
有什么想法的都欢迎来留言~(≧▽≦)/~
相关文章推荐
- 自己整理的初高中学校名字及所属省市区的sql文件
- enumerate小技巧和列表推导式
- 再谈PHP单引号和双引号区别
- javascript的全局函数
- library not found for -lAFNetworking
- jmeter学习笔记(Threads)
- Android Uevent 分析,从kernel到framework
- 指针简介
- leetcode 32. Longest Valid Parentheses
- C/C++编程规范
- TC问题
- BC404学习笔记-ABAP面向对象编程(二)-继承中的构造函数
- iOS 捕获程序崩溃日志
- Python小程序
- MySQL5.7.10 初始化失败error(mysqld --initialize / mysql_install_db) 没有创建系统数据库(prematurely with errno= 32)
- centos install ruby
- 嵌入式 Linux线程同步读写锁rwlock示例
- jquery学习之事件委派
- sysfs接口整理
- 团队作业(二)