我們知道可以傳送 JSON 資料到 API 上面。
通常我們都會使用 POST 方法,在實際程式設計的時候我們應該如何獲得傳送的 JSON 資料呢?
Controller 獲得 JSON 資料在客戶端透過 API 傳送 JSON 資料到 Controller 的時候,我們可以在 Controller 使用 RequestBody 註解來獲得 JSON 資料。
考察下面的程式碼:
/** * Search Question Index * * @return */ @PostMapping("/sold") public ResponseEntity<?> searchUser(@RequestBody RealEstateRequest realEstateRequest) { logger.debug("realEstateRequest - {}" , realEstateRequest.getPropertyTown()); REListing reListing= listingService.getREListingById(); return new ResponseEntity<REListing>(reListing, HttpStatus.OK); }
在 API 獲得 JSON 資料後,將會嘗試將 JSON 資料的內容設定到物件 RealEstateRequest 中。
所以,我們還需要在程式碼中定義一個物件 RealEstateRequest。
RealEstateRequest 物件的程式碼如下,在下面的程式碼中,我們省下了上面需要匯入的 package 等
public class RealEstateRequest implements Serializable { private static final long serialVersionUID = 6474765081240948885L; private String propertyTown; public String getPropertyTown() { return propertyTown; } public void setPropertyTown(String propertyTown) { this.propertyTown = propertyTown; }}
在這裡需要注意的是,為了能夠設定正確的值到物件中,你 propertyTown 的這個變數需要和 JSON 物件中的變數相同。
所以你的 JSON 測試資料應該為:
{ "propertyTown" : "Manchester"}
透過 API 檢視物件,你會看到從客戶端傳遞的 JSON 資料已經被設定為正常的資料了。
POSTMAN 從客戶端傳送的資料如下:
JSON 資料欄位名在上面的示例中,我們定義的一個 JSON 欄位名為:propertyTown。
如果不做任何設定的話,你的物件是需要使用與這個欄位名完全相同的名字才能獲得需要的資料的,有時候我們可能不希望這樣。我們希望使用不同的名字,例如我們希望設定欄位名為:property_town,但是我們還是希望 propertyTown 變數能夠獲得值。
這個時候你就需要使用:JsonProperty 註解了。
可以在定義的物件中使用 @JsonProperty(“property_town”) 註解。
原因是 RequestBody 使用 jackson 來對映物件的,所以 JsonProperty 這個是 jackson 的註解,主要告訴 jackson 來如何對欄位中的資料來進行對映。
在完成上面的修改後,你的 JSON 資料應該是如下的:
然後再對 API 進行測試,你會看到 propertyTown 也能夠設定上你傳遞的引數。