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!