[英]Jackson Json Mapper: no field or empty field?
我使用Jackson Json Mapper來解析我的服務器上的查詢。
例如,我正在等待適合類My_class
查詢:
class My_class {
String a;
String b;
}
我以這種方式反序列化查詢:
public <T> T Deserialize(String json, Class<T> type) throws DeserializationException {
if (json == null || type == null) {
throw new IllegalArgumentException();
}
try {
return objectMapper.readValue(json, type);
} catch (JsonParseException e) {
throw new DeserializationException(e);
} catch (org.codehaus.jackson.map.JsonMappingException e) {
throw new DeserializationException(e);
} catch (IOException e) {
throw new DeserializationException(e);
}
}
以下是兩個示例查詢:
{"a":"test"}
{"a":"test", "b":null}
問題是我想知道用戶何時向我發送僅包含字段a
的查詢以及何時發送字段b
設置為null
的查詢。 映射器在兩種情況下都將字段b
標記為null
。
有什么更好的方法(並避免編寫自己的反序列化器)?
您可以使用方法isNull()
來檢查JsonNode
是否為null
文字。
boolean isNull()
可用於檢查此節點是否是從JSON文字空值創建的方法。
還有isMissingNode()
,它似乎有類似的用途。 如果節點實際上不存在於JSON文檔中,則它應返回true。 此方法很有用,例如,如果要對未明確設置的屬性使用默認值。
boolean isMissingNode()
對於“虛擬”節點返回true的方法,當沒有實際節點匹配給定條件時,這些節點表示由路徑訪問器方法構造的缺失條目。
在我看來,你應該避免構建依賴於null
和缺少節點之間差異的東西。 您實際上是在反序列化的JSON中添加了某種額外的數據類型:在兩種情況下,大多數JSON API都返回null
而不是只有null
,現在您擁有null文字和缺少節點 ,這不是常見的做法。 這很令人困惑,它可能會導致您的API出現問題,因為客戶端需要做額外的工作來配置其序列化程序以區分這兩種狀態。 可能並非所有JSON庫都支持它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.