Rumah >Java >javaTutorial >Bagaimana untuk Mengecualikan Medan Tertentu daripada Pensirilan Gson tanpa Anotasi?

Bagaimana untuk Mengecualikan Medan Tertentu daripada Pensirilan Gson tanpa Anotasi?

Patricia Arquette
Patricia Arquetteasal
2024-12-09 00:51:10182semak imbas

How to Exclude Specific Fields from Gson Serialization without Annotations?

Gson: Mengecualikan Medan Tertentu daripada Pensirian tanpa Anotasi

Mengecualikan medan tertentu daripada bersiri Gson tanpa anotasi boleh menjadi rumit. Begini cara untuk mencapainya menggunakan ExclusionStrategy tersuai:

Custom ExclusionStrategy

Gson menyediakan antara muka ExclusionStrategy yang membolehkan anda menyesuaikan cara medan dikecualikan. Cipta pelaksanaan antara muka ini:

public class FieldExclusionStrategy implements ExclusionStrategy {

    private Pattern pattern;

    public FieldExclusionStrategy(String regex) {
        pattern = Pattern.compile(regex);
    }

    @Override
    public boolean shouldSkipField(FieldAttributes fa) {
        String fieldName = fa.getName();
        return pattern.matcher(fieldName).matches();
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
}

Menyesuaikan Pengecualian

Dalam contoh yang disediakan, ExclusionStrategy mengecualikan medan berdasarkan ungkapan biasa yang diberikan. Anda boleh menyesuaikan corak agar sepadan dengan medan yang diingini untuk dikecualikan, seperti country.name.

Menggunakan Strategi Pengecualian

Setelah Strategi Pengecualian ditakrifkan, gunakannya semasa mengkonfigurasi the GsonBuilder:

Gson gson = new GsonBuilder()
    .setExclusionStrategies(new FieldExclusionStrategy("country.name"))
    .create();

Penggunaan Contoh

Selepas mengkonfigurasi Gson, anda boleh mensirikan objek Pelajar anda seperti berikut:

String json = gson.toJson(student);

Ini akan mengecualikan medan country.name daripada output JSON bersiri.

Nota Tambahan

  • Jika anda mahu kecualikan medan berdasarkan kriteria lain (seperti jenis atau anotasi), anda boleh mengubah suai kaedah shouldSkipField dan shouldSkipClass dengan sewajarnya.
  • Untuk medan dengan jenis yang sama, peraturan pengecualian masih digunakan pada laluan medan tertentu. Dalam kes ini, countryOfBirth.name tidak akan dikecualikan.
  • Untuk mengecualikan keseluruhan jenis, ganti kaedah shouldSkipClass dalam ExclusionStrategy.

Atas ialah kandungan terperinci Bagaimana untuk Mengecualikan Medan Tertentu daripada Pensirilan Gson tanpa Anotasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn