2016-04-18 8 views
2

Jacksonを使用してオブジェクトをシリアル化できますが、注釈@JsonSerialize(using = MyCustomSerializer.class)で登録されたカスタムシリアライザは無視されますか?@JsonSerializeアノテーションを無視することはできますか?

理由: ジャクソンを使用して、オブジェクトをマップに変換したい場合は、com.fasterxml.jackson.databind.ObjectMapper.convertValue(object,Map.class)を使用します。 私のクラスはカスタムシリアライザ(@JsonSerialize)を持っていますが、デシリアライザは見逃しているので、現在動作しません。私はカスタムシリアライザを必要とし、私は本当に必要がなく、デシリアライザを書いたくありません。

ObjectMapper.convertValueは、シリアル化を使用してデシリアライズに失敗します。

@JsonSerializeを無視し、デフォルトのシリアル化ロジックを使用するObjectMapperを使用したいと考えています。それはジャクソンで可能ですか?

答えて

2

これは完全に可能です。あなたはこのように、ObjectMapperごとに注釈を無効にできます。詳細については

ObjectMapper mapper = new ObjectMapper(); 
mapper.disable(MapperFeature.USE_ANNOTATIONS); 

githubでドキュメントを超える確認したり、baeldungでの例をご確認ください。

+0

このソリューションは、すべての注釈を無効にする方法はありません。 –

1

また、ignoreJsonTypeInfoIntrospectorを使用してスペシフィックなアノテーションを無効にし、スペキュレーションのアノテーションクラスにnullを返すこともできます。

detailed exampleより

のために、ここで別の解決策を見てみましょう最後github issue

public class IgnoreJsonUnwrappedAnnotationInspector extends JacksonAnnotationIntrospector { 
    @Override 
    public NameTransformer findUnwrappingNameTransformer(AnnotatedMember member) { 
    return null; 
    } 
} 

を見て、さまざまなシナリオのためのより多くのObjectMapperインスタンスを作成することです。

関連する問題