Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengendalikan Ralat "Medan Tidak Diiktiraf" Apabila Menyahseri JSON dengan Jackson?

Bagaimana untuk Mengendalikan Ralat "Medan Tidak Diiktiraf" Apabila Menyahseri JSON dengan Jackson?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 07:34:03312semak imbas

How to Handle

Jackson dengan JSON: Menyelesaikan Ralat "Unrecognized Field"

Apabila menukar rentetan JSON kepada objek Java menggunakan Jackson, anda mungkin menghadapi ralat "Medan tidak dikenali, tidak ditandakan sebagai tidak dikenali" jika terdapat medan tidak dikenali dalam JSON. Untuk menyelesaikan isu ini, Jackson menyediakan dua pilihan:

Anotasi JsonIgnoreProperties

Anotasi @JsonIgnoreProperties membolehkan anda mengabaikan medan tertentu dalam POJO semasa penyahserilan. Sebagai contoh, dalam kes anda, anda boleh mengabaikan medan "pembungkus":

@JsonIgnoreProperties(ignoreUnknown = true)
class Wrapper { ... }

Ini akan mengabaikan sebarang sifat yang tidak dikenali, termasuk "pembungkus."

Penyahserialisasi Tersuai

Jika anda memerlukan kawalan yang lebih terperinci ke atas sifat yang diabaikan, anda boleh membuat deserializer tersuai. Gantikan kaedah penyahserikatan untuk mengendalikan medan yang tidak dikenali:

public class CustomDeserializer extends JsonDeserializer<Wrapper> {
    @Override
    public Wrapper deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        Wrapper wrapper = new Wrapper();
        ObjectCodec codec = parser.getCodec();
        JsonToken token = parser.getCurrentToken();
        while (token != JsonToken.END_ARRAY) {
            if (token == JsonToken.START_OBJECT) {
                Student student = codec.readValue(parser, Student.class);
                wrapper.getStudents().add(student);
            }
            token = parser.nextToken();
        }
        return wrapper;
    }
}

Kemudian, daftarkan penyahserialisasi tersuai dengan Jackson:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new SimpleModule().addDeserializer(Wrapper.class, new CustomDeserializer()));

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat "Medan Tidak Diiktiraf" Apabila Menyahseri JSON dengan Jackson?. 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