这两天在和移动端对接接口时,发生了404错误。使用的是net.sf.json.jsonarray
检查发现是返回的jsonarray字符串中有一个对象的属性值为空。当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取。
上网查了好几种解释,但是和我的情况多少有些区别。但是也算是类似问题的一种解决方案吧,所以都记录下来了。例子来自网路,侵删!
1,当使用com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter转换返回数据为json时,会省略掉为空为null的属性值。
如果使用这个json包,那么不会像我这边报错,但是对应的属性就没有了,前端不会查找到。能解决报错,但是不能从根本上解决问题。
【java|解决json字符串中包含null传递报错404的问题】2,spingmvc.xml配置json转换器时加上对空和null的处理,配置如下:
JSON转换器
application/json;
charset=UTF-8
text/html;
charset=UTF-8
QuoteFieldNames
WriteDateUseDateFormat WriteNullListAsEmpty WriteNullStringAsEmpty WriteNullBooleanAsFalse
下面是json的几个序列化属性:
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
Map < String , Object > jsonMap = new HashMap< String , Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","wuzhuti.cn");
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);
System.out.println(str);
//输出结果:{"a":1,"b":"","c":null,"d":"wuzhuti.cn"}
最后没有采用上面的方法,但是也是不错的解决思路。
因为已经知道是有属性值为null的问题,在生成json的时候,把属性值装换为空字符串或者0即可。
学无止境
推荐阅读
- java|2018 年度新增开源软件排行榜之国产 TOP 50
- Java|web基础——CSS层叠样式表
- Java变量分类
- Java标识符
- Java注释
- 大数据|Flink CDC + Hudi + Hive + Presto 构建实时数据湖最佳实践
- 大数据|「Hudi系列」Apache Hudi入门指南 | SparkSQL+Hive+Presto集成
- 【JAVA并发编程】读写锁ReentrantReadWriteLock的实现分析
- 分治算法解决汉诺塔问题(Java实现)