5

私が望むのは、クラスのオブジェクトに対して条件付きでデフォルトの BeanSerializer を使用することです:

class MyCustomSerializer extends StdSerializer<AbstractEntity> {

    public MyCustomSerializer() {
        super(AbstractEntity.class);
    }

    @Override
    public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (someCondition()) {
           serializeNormalWay(); //how?
        } else {
           //custom serialization
        }
    }
}

私はそのようなことをしようとしました:

serializerProvider.defaultSerializeValue(o, jsonGenerator);

しかし、これは MyCustomSerializer のメソッドを呼び出し、終わりのない再帰があります。通常のBeanシリアライゼーションに使用できる適切なSerializerオブジェクトを取得するにはどうすればよいですか?

4

1 に答える 1

2

これには、もう少し複雑なセットアップが必要です。使用するシリアライザーを直接オーバーライドする代わりに、Jackson にシリアライザーを作成させてから引き継ぐ必要があります。これは、 BeanSerializerModifier( 経由でModule) methodを登録することによって行うことができますmodifySerializer(...)。使用されるデフォルトのシリアライザーが与えられ、そのデフォルトのシリアライザーを渡してカスタムのシリアライザーを構築できます。

于 2015-05-04T22:01:22.153 に答える