我使用Java RESTful
服务和使用客户端。 Java应用程序正在以JSON
格式接收和传送数据。我需要在消费RESTful client
中讨论2个请求及其实现。
如果单击按钮,将生成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命令时,我得不到任何回报。但是,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请求成功时才这样做。
答案 0 :(得分:1)
对于您的代码,如果没有发生错误,它应该在执行post请求后返回数据。所以我建议你做这些事情来检查邮件请求是否成功处理:
f12
,检查网络标签,然后查看
请求进程响应,如果响应为空,则执行下一步
步骤; generateAddress
方法中设置断点,然后调试步骤
一步一步,看看会发生什么。