私はいくつかの方法を試しましたjacksonシリアライザカバー文字列ヌルから空文字列( "")とオブジェクトのヌルがnullのままです
1.createカスタムJsonSerializer、および上書きSerializeメソッド
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString("");
}
と、このようなNullValueSerializerにJsonSerializerを、設定:
objectMapper.getSerializerProvider().setNullValueSerializer(new NullStringSerializer());
しかし、我々はヌルからクラスタイプを取得することはできません。すべてのnullは ""に変換され、オブジェクトが含まれます。
2.IfはSerializeメソッドで使用SimpleModule
SimpleModule simpleModule = new SimpleModule("StringModule", Version.unknownVersion());
simpleModule.addSerializer(Object.class, new NullStringSerializer());
objectMapper.registerModule(simpleModule);
は、PARAM値はnullである任意の特性を有していません。ジャクソン2.6.0のresouceコードから
、MapSerializer.java方法serializeFields
を見つける(私のオブジェクトがマップである)ライン: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が提供するだけのためにそれをひそか、nullでありますヌル。 と私に戦略を変更するためのインターフェイスがありません。
私はMapSerializerをオーバーライドできますが、新しいMapSerializerを工場に設定する方法はわかりません。
解決策はありますか?
あなたのお役に立てる、ありがとうございます!