我們知道可以發送 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 也能夠設置上你傳遞的參數。
本文分享自微信公衆號 - CWIKIUS(CWIKIUS)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。