[英]Ajax requests in the RESTful client
我使用Java RESTful
服務和使用方客戶端。 Java應用正在接收和傳遞JSON
格式的數據。 我需要討論2個請求及其在使用中的RESTful client
。
如果單擊按鈕,則會生成WalletInfo
實體並將其存儲在數據庫中。 它具有id
, name
, address
和currency
等屬性。 點擊本質上是一個POST
請求。
提供了定義,
@POST
@Path("generateAddress")
@Consumes(MediaType.APPLICATION_JSON)
@Produces({MediaType.APPLICATION_JSON})
WalletInfo generateAddress(GenerateWallet generateWallet);
這是實現,
public synchronized WalletInfo generateAddress(GenerateWallet generateWallet) {
String walletName = generateWallet.getWalletName();
String currencyName = generateWallet.getCurrencyName();
WalletInfo walletInfo = iWalletInfoDao.getWalletInfoWithWalletNameAndCurrency(walletName, currencyName);
return walletInfo;
}
我使用此cURL
命令執行POST
請求,
curl -H "Content-Type: application/json" -X POST -d '{"walletName": "Rome12345","currencyName":"Bitcoin"}' http://localhost:8080/rest/wallet/generateAddress
顯然,由於它是POST
請求,因此在terminal
中不返回任何內容。 我還有另一個GET
請求,提供了定義,
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("currencyandname/{walletName}/{currencyName}")
WalletInfo getWalletInfoWithCurrencyAndWalletName(@PathParam("walletName") String walletName,
@PathParam("currencyName") String currencyName);
這是實現,
public WalletInfo getWalletInfoWithCurrencyAndWalletName(String walletName, String currencyName) {
return iWalletInfoDao.getWalletInfoWithWalletNameAndCurrency(walletName, currencyName);
}
我對執行這樣的cURL
請求,
curl -X GET http://localhost:8080/rest/wallet/currencyandname/test1/Bitcoin | json
如果名稱和貨幣信息與數據庫中的信息匹配,它將返回WalletInfo
實體的信息。 例如,我們使用cURL請求提供名稱test1
和貨幣Bitcoin
,並在終端中獲得類似內容,
{
"id": 1,
"name": "test1",
"address": "mp51mPC38Wtcmybdyd9MPEB2bKnw6eYbCs",
"currency": "Bitcoin"
}
如果沒有匹配項,我們將一無所獲。 當我們找到匹配項時,我們可以使用其他信息,主要是地址。
讓我們談談客戶。 如我之前所說,使用方客戶端中有一個按鈕來生成地址並用該地址填充下拉菜單。 點擊按鈕后,以下POST
請求將在客戶端中執行,
var dataValue = {
"walletName": "walletName",
"currencyName": "selectedCurrency"
};
dataValue = JSON.stringify(dataValue);
$.ajax({
type: "POST",
url: "www.hostdomain.com" + "/rest/wallet/generateAddress",
data: dataValue,
contentType: "application/json",
dataType: "json",
success: function(data){
// the GET request code will be here
},
failure: function(errMsg) {
// alert(errMsg);
}
});
POST請求正確嗎? 我的意思是,當我在終端中執行POST
CURL命令時,沒有任何回報。 但是,成功執行POST
請求后, success function(data)
似乎需要data
作為輸入參數。 在Java方法中,我還將WalletEntity
作為返回類型。
2nd Question
如果POST
請求成功,則意味着將生成WalletEntity並將其存儲在MySQL中。 現在,我想執行GET
請求,以使用名稱/貨幣名稱獲取相同的WalletInfo
實體,並使用該實例中的address參數。
它必須位於POST
請求的success: function(data)
內部,因為我們僅在成功創建錢包后才執行GET請求,並將為此目的使用Java應用程序的getWalletInfoWithCurrencyAndWalletName
方法。 我將GET
請求成像為某種東西,
$.ajax({
url: "www.hostdomain.com"+ "/rest/wallet/currencyandname/" + "wallet_Name" + "/" + "selected_Currency",
type: "GET",
dataType: "json",
success: function (data) {
// I should have the WalletEntity here as the data
// from the `GET` request
$("#address").append($('<option></option>').attr("value", "1").text(walletName + " " + data['address'].toString()));
}
});
我假設數據是WalletEntity
,地址是它的參數之一。 因此,如果我只希望有address
,那么我需要為此寫入類似data['address']
。
客戶端中的GET
請求正確嗎? 我們僅在POST請求成功的情況下進行。
根據您的代碼,如果沒有發生錯誤,它應該在執行post請求后返回數據。 因此,我建議您執行以下操作以檢查過帳請求是否已成功處理:
f12
,檢查“ 網絡”選項卡,然后查看請求進程響應,如果響應為空,則執行下一步; generateAddress
方法中設置一個斷點 ,然后逐步調試,看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.