首頁 > Java > 主體

檢查轉換為 Java 類別時 Json 屬性值的類型

WBOY
發布: 2024-02-22 14:16:06
轉載
497 人瀏覽過

php小編柚子為您帶來本文的 Java 問答主題:「檢查轉換為 Java 類別時 Json 屬性值的類型」。在開發過程中,我們經常需要將 JSON 資料轉換為 Java 對象,但在此過程中如何有效地檢查和處理屬性值的類型是一項重要的技能。本文將為您解答這個問題,幫助您更能理解並運用 JSON 資料轉換技術。

問題內容

假設我有以下json數據,這裡我有整數類型的id,在java類別中id的類型是string。

{
  "id": 1,
  "name": "user1"
}
登入後複製
@lombok.data
@allargsconstructor
@noargsconstructor
class data {
    string id;
    string name;
}
登入後複製

我想將 json 轉換為該類,同時嚴格檢查 json 屬性的值是否與類別欄位的類型相同。

String json = "{\"id\":1,\"name\":\"user1\"}";
ObjectMapper objectMapper = new ObjectMapper(new JsonFactory());

Data data = objectMapper.readValue(json, Data.class);
System.out.println(data);
登入後複製

data(id=1, name=user1)

#我希望這裡不應該發生轉換,但它會被轉換。

解決方法

我猜想的一種方法是使用自訂反序列化器並進行簡單的類型檢查:

public class customdeserializer extends stddeserializer<string> {

  protected customdeserializer() {
    this(null);
  }

  protected customdeserializer(class<?> vc) {
    super(vc);
  }

  @override
  public string deserialize(jsonparser p, deserializationcontext ctxt) throws ioexception, jacksonexception {
    if (p.currenttoken() != jsontoken.value_string) {
      throw new invalidformatexception(p, "expected string type", p.getvalueasstring(), string.class);
    }
    return p.getvalueasstring();
  }
}
登入後複製

然後在您想要檢查的欄位中使用該反序列化器:

public class Data {
  @JsonDeserialize(using = CustomDeserializer.class)
  String id;
}
登入後複製

以上是檢查轉換為 Java 類別時 Json 屬性值的類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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