欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

fastjson-对象转json字符串时保留空字段SerializerFeature无效的问题

程序员文章站 2022-03-12 21:41:59
需求简述将java实体类转换为json字符串,空字段也需要转换。问题说明用fastjson将java对象转json字符串时默认去除空字段,网上查阅一番,都说转的时候添加SerializerFeature.WriteNullStringAsEmpty参数就行,亲测了一下,没有达到效果(原因未知)。如下例子:AssessReq 还有个caseId字段特意不设置值AssessReq ar= new AssessReq();ar.setAge(11);ar.setUsername("test");l...

需求简述

将java实体类转换为json字符串,空字段也需要转换。

问题说明

用fastjson将java对象转json字符串时默认去除空字段,网上查阅一番,都说转的时候添加SerializerFeature.WriteNullStringAsEmpty参数就行,亲测了一下,没有达到效果(原因未知)。
如下例子:AssessReq 还有个caseId字段特意不设置值

AssessReq ar= new AssessReq();
ar.setAge(11);
ar.setUsername("test");
logger.info("Json =>> " + JSON.toJSONString(ar, SerializerFeature.WriteNullStringAsEmpty);

输出结果:

testJson =>> {"age":11,"username":"test"}

结果可见,caseId字段并有保留。SerializerFeature.WriteMapNullValue 也试过了也是不不行。

解决方案

后面换了种方法才解决的,解决方法如下:

// 自定义空字段处理规则
ValueFilter filter = (obj, s, v) -> {
	if (v == null) {
	        logger.info("s =>> "+s);
	        return "";
	    }
	    return v;
	};
AssessReq ar= new AssessReq();
ar.setAge(11);
ar.setUsername("test");
logger.info("testJson =>> " + JSON.toJSONString(ar, filter));

输出结果:

testJsonn =>> {"age":11,"caseId":"","username":"test"}

结果可见,是可以实现预期的效果的。

本文地址:https://blog.csdn.net/qq_21758475/article/details/111892009

相关标签: json java