RESTful客户端

时间:2017-08-31 06:49:51

标签: javascript java ajax rest curl

我使用Java RESTful服务和使用客户端。 Java应用程序正在以JSON格式接收和传送数据。我需要在消费RESTful client中讨论2个请求及其实现。

如果单击按钮,将生成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命令时,我得不到任何回报。但是,success function(data)在成功执行data请求后似乎需要POST作为输入参数。我还在Java方法中使用WalletEntity作为返回类型。

2nd Question

如果POST请求成功,则表示生成WalletEntity并存储在MySQL中。现在,我想使用名称/货币名称执行GET请求以获取相同的WalletInfo实体,并使用该实例中的address参数。

它必须位于success: function(data)请求的POST内,因为我们只会在成功创建钱包后执行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请求成功时才这样做。

1 个答案:

答案 0 :(得分:1)

对于您的代码,如果没有发生错误,它应该在执行post请求后返回数据。所以我建议你做这些事情来检查邮件请求是否成功处理:

  1. 在浏览器中按f12,检查网络标签,然后查看 请求进程响应,如果响应为空,则执行下一步 步骤;
  2. generateAddress方法中设置断点,然后调试步骤 一步一步,看看会发生什么。