1. ホーム

[解決済み】JACKSONがフィールドのみを使用するように指定する方法 - できればグローバルに使用したい

2022-04-11 04:41:04

質問

jackonのデフォルトの動作は、プロパティ(ゲッターとセッター)とフィールドの両方を使用して、jsonへのシリアライズとデシリアライズを行っているようです。

私は、フィールドをシリアライズ設定の標準的なソースとして使用したいので、jacksonにプロパティを全く見て欲しくありません。

アノテーションを使えば、個々のクラス単位でできるんだけど。

 @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

でも、これをいちいちクラスにつけるのはちょっと......。

これをグローバルに設定することは可能でしょうか?Object Mapperに追加するような?

解決方法は?

このように、個々のObjectMapperを設定することができます。

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

グローバルに設定したい場合は、通常、ラッパークラスを通して設定されたマッパーにアクセスします。