4

我正在使用 Google HTTP 库来解析从 get 请求接收到的 JSON 数据,但现在发生的奇怪事情是,对于我的 @Keys 之一,作为 JSON 出现的值为 null(hasShipmentBeenPulled):

{
    "orderNo": 19.000,
    ...
    "customFields": {
        "hasShipmentBeenPulled": null,
        "service": null
    }
}

但是当库解析值时,它默认为“真”。这是课程:

public class CustomFields {
    @Key
    private Boolean hasShipmentBeenPulled;

    @Key
    private String service;

    public Boolean getHasShipmentBeenPulled() {
        return hasShipmentBeenPulled;
    }

    public void setHasShipmentBeenPulled(Boolean hasShipmentBeenPulled) {
        this.hasShipmentBeenPulled = hasShipmentBeenPulled;
    }

    public String getService() {
        return service;
    }

    public void setService(String service) {
        this.service = service;
    }
}

这是输出:

OrderNo: 19
UseOrderNoRoot: 0
hasShipmentBeenPulled: true

为什么会这样?这不应该默认为false吗?我在过去 2 小时内阅读的所有内容都表明空值应该默认为 false,或者理想情况下,我希望它保持为空值。

PS 下面是使魔术发生的代码:

HttpRequest request = requestFactory.buildGetRequest(url).setHeaders(getHeaders());
Type type = new TypeToken<List<Order>>() {}.getType();


List<Order> orders = (List<Order>) request.execute().parseAs(type);
for(Order order : orders) {
    System.out.println("OrderNo: " + order.getOrderNo());
    System.out.println("UseOrderNoRoot: " + order.getUseOrderNoRoot());
    System.out.println("hasShipmentBeenPulled: " + order.getCustomFields().getHasShipmentBeenPulled());

最终我要完成的是解析 JSON,如果 JSON 中的值设置为 null,我希望 Java 对象也设置为 null。我有一些必填字段将始终传入,但还有其他字段是可选的。如果该字段是可选的,如果它被传递,我仍想收集该信息,但如果不是,它可以保留为 null 或完全忽略。我不确定使用这个库处理该功能的最佳方式。到目前为止,我一直没有成功。

谢谢。

4

0 回答 0