首頁 > Java > java教程 > 使用 Jackson 反序列化 JSON 時如何處理「無法辨識的欄位」錯誤?

使用 Jackson 反序列化 JSON 時如何處理「無法辨識的欄位」錯誤?

Mary-Kate Olsen
發布: 2024-11-17 07:34:03
原創
390 人瀏覽過

How to Handle

使用JSON 的Jackson:解決「無法辨識的欄位」錯誤

使用Jackson 將JSON 字串轉換為Java 物件時,您可能會遇到如果JSON 中存在無法識別的字段,則會出現錯誤「無法識別的字段,未標記為可忽略」。為了解決這個問題,Jackson 提供了兩個選項:

JsonIgnoreProperties 註解

@JsonIgnoreProperties 註解允許您在反序列化過程中忽略 POJO 中的特定欄位。例如,在您的情況下,您可以忽略「包裝器」欄位:

@JsonIgnoreProperties(ignoreUnknown = true)
class Wrapper { ... }
登入後複製

這將忽略任何無法識別的屬性,包括「包裝器」。

自訂反序列化器

如果您需要對忽略的屬性進行更精細的控制,您可以建立自訂反序列化器。重寫反序列化方法來處理無法辨識的欄位:

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;
    }
}
登入後複製

然後,向 Jackson 註冊自訂反序列化器:

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new SimpleModule().addDeserializer(Wrapper.class, new CustomDeserializer()));
登入後複製

以上是使用 Jackson 反序列化 JSON 時如何處理「無法辨識的欄位」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板