我已经尝试了几种方法jackson serializer cover字符串null为空String(“”)并保留object null为空
例如,
1.创建一个自定义JsonSerializer,并重写序列化方法
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString("");
}
,并设置JsonSerializer到NullValueSerializer,像这样:
objectMapper.getSerializerProvider().setNullValueSerializer(new NullStringSerializer());
,但我们无法从空类的类型。所有的null都会隐藏“”,包含对象。
2.如果使用SimpleModule
SimpleModule simpleModule = new SimpleModule("StringModule", Version.unknownVersion());
simpleModule.addSerializer(Object.class, new NullStringSerializer());
objectMapper.registerModule(simpleModule);
在序列化的方法,该参数值的方式不具有任何性质,这是空。
从杰克逊2.6.0的种源代码,找到方法在serializeFields
MapSerializer.java(我的对象是一个地图)线:545
for (Map.Entry<?,?> entry : value.entrySet()) {
Object valueElem = entry.getValue();
// First, serialize key
Object keyElem = entry.getKey();
if (keyElem == null) {
provider.findNullKeySerializer(_keyType, _property).serialize(null, gen, provider);
} else {
// One twist: is entry ignorable? If so, skip
if (ignored != null && ignored.contains(keyElem)) continue;
keySerializer.serialize(keyElem, gen, provider);
}
// And then value
if (valueElem == null) {
provider.defaultSerializeNull(gen);
} else {...}
}
当valueElem为空,则提供刚好它隐蔽到空值。 并没有任何接口让我改变策略。
我可以重写MapSerializer,但我不知道如何将新的MapSerializer设置为工厂。
有没有解决方法?
期待您的帮助,谢谢!