java|解决json字符串中包含null传递报错404的问题

这两天在和移动端对接接口时,发生了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 WriteDateUseDateFormatWriteNullListAsEmptyWriteNullStringAsEmptyWriteNullBooleanAsFalse

下面是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即可。


学无止境

    推荐阅读