私は、次の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感謝
私は製品のために、しかし、郵便配達を通じて応答を取得しています、と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;
.
.
.
}