我已經嘗試了幾種方法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設置爲工廠。
有沒有解決方法?
期待您的幫助,謝謝!