开发者社区> 问答> 正文

fastjson2怎么让null属性序列化成空字符串

fastjson2怎么让null属性序列化成空字符串

  • fastjson1直接使用

ValueFilter valueFilter = (o, s, o1) -> { if (Objects.isNull(o1)) { return ""; } else { return o1; } };

  • fastjson2使用这个方法会导致异常

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.List

at com.alibaba.fastjson2.writer.ObjectWriterImplList.write(ObjectWriterImplList.java:207)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:383)
at com.alibaba.fastjson2.writer.ObjectWriter_2.write(Unknown Source)
at com.alibaba.fastjson2.writer.ObjectWriterImplList.write(ObjectWriterImplList.java:254)
at com.alibaba.fastjson2.writer.FieldWriterObject.write(FieldWriterObject.java:196)
at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:387)
at com.alibaba.fastjson2.writer.ObjectWriter_1.write(Unknown Source)
at com.alibaba.fastjson2.JSON.toJSONString(JSON.java:1005)
at com.jtech.srm.sys.Test1.test1(Test1.java:121)

原提问者GitHub用户JackJieZhang

展开
收起
大圣东游 2023-04-21 12:05:17 1112 0
3 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    在fastjson2 中你可以通过实现 ValueFilter 接口来将null属性序列化成空字符串,样例如下:

    ValueFilter valueFilter = new ValueFilter() { @Override public Object process(Object object, String name, Object value) { if (value == null) { return ""; } return value; } }; String json = JSON.toJSONString(yourObject, valueFilter); 需要注意的是,在fastjson2中使用ValueFilter处理List对象时,需要判断该对象是否为List类型,如果是,则需要将List序列化成Json数组,否则会抛出 ClassCastException 异常。

    ValueFilter valueFilter = new ValueFilter() { @Override public Object process(Object object, String name, Object value) { if (value instanceof List) { return JSON.toJSON(value); } else if (value == null) { return ""; } return value; } }; String json = JSON.toJSONString(yourObject, valueFilter); 这样可以避免上述异常。

    2023-04-21 21:10:25
    赞同 展开评论 打赏
  • Bean bean = ...; JSON.toJSONString(bean, JSONWriter.Feature.NullAsDefaultValue); // 将空置输出为缺省值,Number类型的null都输出为0,String类型的null输出为"",数组和Collection类型的输出为[]

    原回答者GitHub用户wsxe9988

    2023-04-21 14:56:02
    赞同 展开评论 打赏
  • 可以使用FastJson的serialzeFeatures属性来实现这个效果。

    很简单,只需要在实体类的属性上加上注解

    @JSONField(serialzeFeatures= {SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty})
    private String description;
    
    

    其中SerializerFeature.WriteMapNullValue是展示值为null的值,默认是不展示的,SerializerFeature.WriteNullStringAsEmpty是将null值转成空字符串。

    2023-04-21 12:48:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载