2017-08-31 122 views
0

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

如果我点击一个按钮,生成一个WalletInfo实体并存储在数据库中。它具有像id,name,addresscurrency的属性。点击本质上是一个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实体的信息。例如,我们所提供的名称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请求是正确的?我的意思是当我在终端上执行CURL命令时,我什么也得不到。但是,在成功执行POST请求之后,success function(data)似乎需要data作为输入参数。我也有WalletEntity作为Java方法中的返回类型。

2nd Question

如果POST请求成功,这意味着一个WalletEntity产生并存储在MySQL。现在,我想要做一个GET请求,使用名称/币种名称获取相同的WalletInfo实体,并使用该实例的地址参数。

它需要的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请求成功时才会这样做。

回答

1

根据您的代码,如果没有错误发生,它应该在发出请求后返回数据。所以,我建议你做这些事情,以检查是否发布请求被成功处理:

  1. f12在浏览器中,检查营销网络选项卡,看到 请求过程的响应,如果响应为空,他们做下一步 步骤;
  2. 设置一个断点generateAddress方法,然后调试步骤 一步一步,看看会发生什么。
+0

看到'syntax'后,你发现代码是正确的吗?我没有部署'Java应用程序',因此,客户端中的'Ajax'请求不是 工作 – Arefe

+1

@Artin然后你可以在'generateAddress'方法中设置一个断点,然后'curl发送一个请求'在命令行上,就像我说的第2步。 – Javdroider

+0

好主意,我会试着去看看 – Arefe