我想检查我的数据是否为空值。 JSON格式的数据如下:
"{
"totalAmount" : 20000,
"items" : [
{
"id" : "9fd91eaf-2b9a-4bae-9692-4222f85e868",
"name" : "X hotel",
"itemType" : 0,
"orderCount" : 2,
"amount" : 5000
},
{
"id" : "9fd91eaf-2b9a-4bae-9692-4222f85e869",
"name": "Special Dinner",
"itemType" : 1,
"orderCount" : 1,
"amount" : 10000
}
]
}"
这是我的检查逻辑。
class NullCheck {
public checkNull (Itinerary itinerary)
Object nu = null;
if (itinerary == null) {
return true;
} else if (itinerary.getTotalAmount() == null || itinerary.getItems() == null) {
return true;
} else if (itinerary.getItems().contains(null)) {
return true;
} else if (itinerary.getItems().stream().flatMap //
(item -> Arrays.stream(item.getClass().getDeclaredFields()))
.map(field -> { field.setAccessible(true); return field.get(nu) == null; } ) ) {
return true;
}
}
然而,在field.get(nu)抛出IlligalAccessException,我无法弄清楚为什么我的代码不能正常工作。
当我阅读java文档时,它在语法上似乎是正确的。
我可以问我的代码中哪一部分失败了吗?
此外,一些json格式数据被转换为String
类型的对象,因此我还需要检查string
是否为空string
。
有简单的方法吗?
答案 0 :(得分:1)
Field.get
返回此字段所代表的字段的值 指定的对象。如果,该值将自动包装在对象中 它有原始类型。
看看它在指定对象上的表达方式?那是因为Field对象不再与特定对象相关联。
这意味着Field.get
操作需要传递item
对象,而不是您当前传递的null
分配的nu
对象。
这看起来非常繁琐,请尝试使用像this这样的库来进行JSON模式验证。
答案 1 :(得分:1)
我认为您的代码中存在2个错误。
第一个:
if (itinerary.getItems().stream().flatMap //
(item -> Arrays.stream(item.getClass().getDeclaredFields()))
.map(field -> { field.setAccessible(true); return field.get(nu) == null; } ) ) {
return true;
}
.map
方法的结果是Stream<Boolean>
,而不是bool表达式。因此会出现语法错误而无法编译。
第二个:
return field.get(nu) == null;
当NullPointerException
是实例字段时,此代码将抛出filed
。get
中的方法Field
可能会抛出一些Exception
,因此应该尝试抓住它。
答案 2 :(得分:0)
Object nu = null;
你正试图获得一个Null对象'nu'。这就是你得到IlligalAccessException的原因。