ホームページ >Java >&#&チュートリアル >シリアル化と逆シリアル化にフィールドのみを使用するように Jackson を構成するにはどうすればよいですか?

シリアル化と逆シリアル化にフィールドのみを使用するように Jackson を構成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-14 03:53:09313ブラウズ

How Can I Configure Jackson to Use Only Fields for Serialization and Deserialization?

シリアル化と逆シリアル化のみにフィールドを使用するように Jackson を構成する

Jackson のデフォルトの動作には、プロパティ (ゲッターとセッター) とフィールドの両方をシリアル化に使用することが含まれますそしてJSONへの逆シリアル化。ただし、一部のユーザーは、プロパティを除き、シリアル化設定の唯一のソースとしてフィールドを優先することを好む場合があります。

個々のクラスに対するアノテーションベースのアプローチ

この動作を強制するにはクラスごとに @JsonAutoDetect アノテーションを使用できます:

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

このアノテーションJackson の考慮事項からプロパティを除外し、フィールドのみがデータ バインディングに使用されるようにします。

すべてのクラスのグローバル構成

各クラスにアノテーションを手動で適用する代わりに、この動作をすべてのクラスに対してグローバルに構成することが可能です。これを実現するには、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));

この構成は、デフォルトの可視性設定をオーバーライドし、すべてのクラスでシリアル化と逆シリアル化にフィールドのみを使用するように Jackson に指示します。

設定されたマッパーへのグローバルなアクセス

グローバル アクセスの場合構成された ObjectMapper に対して、ラッパー クラスを使用できます。

public class MyGlobalMapper {
    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.setVisibility(MAPPER.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
    }

    public static ObjectMapper get() {
        return MAPPER;
    }
}

このラッパー クラスは、構成された ObjectMapper を取得するための静的メソッドを提供し、毎回再構成することなくアプリケーション全体で使用できるようにします。 .

以上がシリアル化と逆シリアル化にフィールドのみを使用するように Jackson を構成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。