春ブートを使用してJavaオブジェクトにJSONのリクエストボディ

BOO:

私は、次のJSONリクエストを持っています

{
  "FreightCalculationRequest": {
    "Products": [
      {
        "sku": "123",
        "size": "S",
        "quantity": "1",
        "shipAlone": "True",
        "itemType": "Shoe"
      },
      {
        "sku": "123",
        "size": "S",
        "quantity": "1",
        "shipAlone": "True",
        "itemType": "Shoe"
      }
    ],
    "ShipToZip": "54452",
    "IsCommercial": "True"
  }
}

私は、カスタムJavaオブジェクトとしてAPIコントローラメソッドにこの要求を送信しようとした後、JSON形式の文字列として、同じオブジェクトを返しています。私は製品のために、しかし、郵便配達を通じて応答を取得しています、とSHIPTOZIP iはヌルを取得し、isCommercial私は偽の取得のために、しかし、私はしても、要求でisCommercialの値としてfalseを持っていません。どうしたの?私は基本的に私のアプリを毎回チェックしていますように私は、MVN春ブートを入力して、Javaで非常によくデバッグする方法がわからない:スタート

ここに私のオブジェクトは、私は戻って、コントローラメソッドへのパラメータとして使用していますということです。

public class FreightCalculationRequest {

    private Product[] Products;
    private String ShipToZip;
    private boolean IsCommercial;

    public Product[] getProducts() { return this.Products; }
    public void setProducts(Product[] itemsRequest) { this.Products = itemsRequest; }

    public String getShipToZip() { return this.ShipToZip; }
    public void setShipToZip(String ShipToZip) { this.ShipToZip = ShipToZip; }

    public boolean getIsCommercial() { return this.IsCommercial; }
    public void setIsCommercial(boolean IsCommercial) { this.IsCommercial = IsCommercial; }

}

そしてここで、コントローラのメソッドイム呼び出しです

@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.POST)
FreightCalculationRequest TestCall(@RequestBody FreightCalculationRequest calculationRequest) {
    return calculationRequest;

}

なぜ私の応答は、要求が入ってくると同じように表示されていません。

アップデート:私は私の変数に@JsonPropertyを追加し、そして今、そのようなのような応答ルックス

{
    "isCommercial": false,
    "shipToZip": null,
    "products": null,
    "Products": null,
    "ShipToZip": null,
    "IsCommercial": false
}

また、MVNの実行中に、私は私の変更を保存することができ、それが自動変更をコンパイルします実現失われたビットの種類、

アップデート:私は問題だと思ったので、私はinitally、JSONレスポンスに「FreightCalculationRequest」のラッピングを取り除くしかしitemTypeには、実際にそれがためであったように、コード内のオブジェクトであるとき、私のJSONでitemTypeには、実際にはエラーを投げていたので私は有効なプロパティに入れて徹底的にJSON解析エラーを読んでいない、そこに私のための2つの解決策は、別のクラスに応答をラップであった、またはFreightCalculationWrappingを削除します。

また、私はJSONをマッピングするために@JsonPropertyを追加する必要があることを学びました

SO感謝

user2004685:

私は製品のために、しかし、郵便配達を通じて応答を取得しています、とSHIPTOZIP iはヌルを取得し、isCommercial私は偽の取得のために、しかし、私はしても、要求でisCommercialの値としてfalseを持っていません。どうしたの?

あなたはラップする必要がありますFreightCalculationRequestを新しいモデルクラスに。

新しいくださいラッパークラスを、

public class FreightCalculationRequestWrapper {
    @JsonProperty("FreightCalculationRequest")
    private FreightCalculationRequest freightCalculationRequest;

    ...
}

この新しい使用ラッパーあなたの要求を処理するクラス:

@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.POST)
FreightCalculationResponse TestCall(@RequestBody FreightCalculationRequestWrapper calculationRequest) {
    return calculationRequest;

}

また、あなたのJSONでプロパティ名は大文字で始まります。

あなたはジャクソンを使用している場合は、使用することができ@JsonProperty(...)、それらを適切にマッピングするために、あなたのモデルフィールドに注釈を。

例えば:

public class FreightCalculationRequest {
    @JsonProperty("Products")
    private Product[] Products;

    .
    .
    .
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=181721&siteId=1