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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wobuaizhi/article/details/83584248

这两天在和移动端对接接口时,发生了404错误。使用的是net.sf.json.jsonarray

检查发现是返回的jsonarray字符串中有一个对象的属性值为空。当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取。

上网查了好几种解释,但是和我的情况多少有些区别。但是也算是类似问题的一种解决方案吧,所以都记录下来了。例子来自网路,侵删!

1,当使用com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter转换返回数据为json时,会省略掉为空为null的属性值。

如果使用这个json包,那么不会像我这边报错,但是对应的属性就没有了,前端不会查找到。能解决报错,但是不能从根本上解决问题。

2,spingmvc.xml配置json转换器时加上对空和null的处理,配置如下:

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean
                class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <description>JSON转换器</description>
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
                <property name="features">
                    <array>
                        <value>QuoteFieldNames</value>
                        <value>WriteDateUseDateFormat</value>
                        <!-- 将Collection类型字段的字段空值输出为[] -->
                        <value>WriteNullListAsEmpty</value>
                        <!-- 将字符串类型字段的空值输出为空字符串 "" -->
                        <value>WriteNullStringAsEmpty</value>
                        <!-- 将Boolean类型字段的空值输出为false -->
                        <value>WriteNullBooleanAsFalse</value>
                    </array>
                </property>
            </bean>
        </mvc:message-converters>
</mvc:annotation-driven>

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

学无止境

猜你喜欢

转载自blog.csdn.net/wobuaizhi/article/details/83584248