首頁  >  文章  >  JsonNullable 物件始終具有 isPresent 值 = true

JsonNullable 物件始終具有 isPresent 值 = true

PHPz
PHPz轉載
2024-02-08 22:42:27639瀏覽

JsonNullable是一個在PHP中常用的對象,它總是具有isPresent值為true的特性。這意味著無論JsonNullable物件是否為空,它都被視為存在。 php小編新一將在以下文章中探討JsonNullable物件的用途和特點,並解釋為何它的isPresent值永遠是true。透過深入了解JsonNullable對象,我們可以更好地理解它在PHP開發中的應用和優勢。

問題內容

我有一個 json 格式的檔案。它儲存我在測試中使用的 json 物件。我使用 objectmapper 將此文件轉換為對象,它轉換得很好,但有一個問題。物件中的所有欄位都有 jsonnullabel 的包裝類型。問題如下 - 所有 jsonnullabel 對象,即使它們包含 null 屬性值 ispresent = true。因此,「orelse」和「ispresent」方法無法正常運作。我得到了 npe。如何確保從字串或 json 檔案轉換時,如果內部存在空值,這些欄位等於「false」?

json 範例:

65蜜蜂5661098c

我已經為 objectmapper 嘗試過這個配置: 物件映射器配置:

ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.registerModule(new Jdk8Module());
    objectMapper.registerModule(new JsonNullableModule());
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);

解決方法

嘗試在類別成員上使用@jsondeserialize jackson 註解,該註解在json 中可以為null ,並且你想要值為“false”而不是null,如下圖:

public class MyJsonClass {
    @JsonDeserialize(using = CustomDeserializer.class)
    public String nullableMember;
}

public class CustomDeserializer
  extends StdDeserializer<String> {

    public CustomDeserializer() { 
        this(null); 
    } 

    public CustomDeserializer(Class<?> vc) { 
        super(vc); 
    }

    @Override
    public String deserialize(JsonParser jsonparser, DeserializationContext context) {
        String text = jsonparser.getText();
        if (null == text) {
          text = "false";
        }
        return text;
    }
}

以上是JsonNullable 物件始終具有 isPresent 值 = true的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除