簡體   English   中英

RESTful客戶端中的Ajax請求

[英]Ajax requests in the RESTful client

我使用Java RESTful服務和使用方客戶端。 Java應用正在接收和傳遞JSON格式的數據。 我需要討論2個請求及其在使用中的RESTful client

如果單擊按鈕,則會生成WalletInfo實體並將其存儲在數據庫中。 它具有idnameaddresscurrency等屬性。 點擊本質上是一個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請求后返回數據。 因此,我建議您執行以下操作以檢查過帳請求是否已成功處理:

  1. 在瀏覽器中按f12 ,檢查“ 網絡”選項卡,然后查看請求進程響應,如果響應為空,則執行下一步;
  2. generateAddress方法中設置一個斷點 ,然后逐步調試,看看會發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM