RESTful客户端中的Ajax请求
我使用Java RESTful
服务和消费客户端。 Java应用程序以JSON
格式接收和传递数据。我需要在消费RESTful client
中讨论2个请求及其实现。RESTful客户端中的Ajax请求
如果我点击一个按钮,生成一个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
实体的信息。例如,我们所提供的名称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请求成功时才会这样做。
根据您的代码,如果没有错误发生,它应该在发出请求后返回数据。所以,我建议你做这些事情,以检查是否发布请求被成功处理:
- 按
f12
在浏览器中,检查营销网络选项卡,看到 请求过程的响应,如果响应为空,他们做下一步 步骤; - 设置一个断点在
generateAddress
方法,然后调试步骤 一步一步,看看会发生什么。
看到'syntax'后,你发现代码是正确的吗?我没有部署'Java应用程序',因此,客户端中的'Ajax'请求不是 工作 – Arefe
@Artin然后你可以在'generateAddress'方法中设置一个断点,然后'curl发送一个请求'在命令行上,就像我说的第2步。 – Javdroider
好主意,我会试着去看看 – Arefe