4

get リクエストから受け取った JSON データを解析するために Google HTTP ライブラリを使用していますが、現在起こっている奇妙なことは、@Keys の 1 つで、JSON として出くわす値が null (hasShipmentBeenPulled) であるということです。

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

しかし、ライブラリが値を解析しているときは、デフォルトで「true」になります。クラスは次のとおりです。

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 時間にわたって私が読んできたすべてのことは、null 値がデフォルトで false に設定されているか、理想的には null 値のままであることを望んでいるという事実を指摘しています。

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