Java/ Sprig MVC RESTful app
で動作し、クライアントがそれを消費します。私は同じ入力パラメータと異なる戻り値の型に2 RESTful
のメソッドを持っています。方法は、以下のクライアント側で同じパラメータと異なる戻り値の型を持つSpring RESTful GETメソッド
// this method should return the `String`
@RequestMapping(value = "wallets/{currencyName}/{walletName}", method = RequestMethod.GET
, produces = "text/html")
public ResponseEntity<String> getAddressWithCurrencyAndWalletName(@PathVariable("currencyName") String currencyName,
@PathVariable("walletName") String walletName) {
logger.info("The currency name is {} and wallet name is {}", currencyName, walletName);
WalletInfo walletInfo = walletService.getWalletInfoWithCurrencyAndWalletName(currencyName, walletName);
if (Objects.isNull(walletInfo)) {
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}
String address = walletInfo.getAddress();
return new ResponseEntity<String>(address, HttpStatus.OK);
}
// this method should return the `Long`
@RequestMapping(value = "wallets/{currencyName}/{walletName}", method = RequestMethod.GET,
produces = "text/html")
public ResponseEntity<Long> getWalletIdWithCurrencyAndWalletName(@PathVariable("currencyName") String currencyName,
@PathVariable("walletName") String walletName) {
logger.info("The currency name is {} and wallet name is {}", currencyName, walletName);
WalletInfo walletInfo = walletService.getWalletInfoWithCurrencyAndWalletName(currencyName, walletName);
if (Objects.isNull(walletInfo)) {
return new ResponseEntity<Long>(HttpStatus.NOT_FOUND);
}
Long walletId = walletInfo.getId();
return new ResponseEntity<Long>(walletId, HttpStatus.OK);
}
を提供しているBalance
ボタンがクリックされた場合、私はこのようなUI、
を持って、私は新しいページを開きたいですURL
がhttp://localhost:63342/WalletClient/balance.html?walletId=someValue
であり、私は非常に目的のために2番目のRESTfulメソッドを使いたいと思います。私はクライアントコードが似ていると思います。
$(document).ready(function() {
var walletName, selectedCurrency;
// generic request function with the URL, method name and
// the request (GET, POST, PUT, DELETE etc) data
function request(url, method, data) {
$.ajax({
url: baseUrl + url,
// url: url,
method: method,
data: data
})
}
// some code
// we have the walletName and selectedCurrency values extracted
$("#balance").click(function() {
console.log("Open the balance page");
var url = "/rest/wallets/?" + "currencyName=" + selectedCurrency + "&" + "walletName=" + walletName;
// get the wallet Id from the cureny name and the wallet name
request(url, "GET").done(function (data) {
window.open("/WalletClient/balance.html?walletId=" + data);
});
});
}
URL
がRESTful
方法から来ていると私はそれがLong
を返すことを期待しています。このシナリオではほとんど質問がありません。
a。同じGET
要求がString
とLong
を返す可能性があるため、同じように動作しますか?
b。 data
は既にString
またはLong
ですか、それ以上のことをする必要がありますか?
わかりやすく、window.open("/WalletClient/balance.html?" + "currencyName=" + selectedCurrency + "&" + "walletName=" + walletName);
のように書くことができます。 しかし、この場合、currencyName
とwalletName
はユーザーに公開されますので、URL
で非表示にすることをお勧めします。
UPDATE
私は、クライアント側URL
は次のようになりますLong
とString
、
/**
* get the wallet address with the currency name and the wallet name
*
* returns the Long value for the walletInfo
* curl -i -H "Accept: text/html" http://localhost:8080/rest/wallets/bitcoin/puut | json
*
*
* returns the String value for the walletInfo address
* curl -i -H "Accept: text/html" http://localhost:8080/rest/wallets/bitcoin/puut/true | json
*
* @param currencyName
* @param walletName
* @return
*/
@RequestMapping(value = "wallets/{currencyName}/{walletName}", method = RequestMethod.GET
, produces = "text/html")
public ResponseEntity<?> getAddressWithCurrencyAndWalletName(@PathVariable("currencyName") String currencyName,
@PathVariable("walletName") String walletName
, @RequestParam(value = "address", required = false) boolean address) {
logger.info("The currency name is {} and wallet name is {}", currencyName, walletName);
WalletInfo walletInfo = walletService.getWalletInfoWithCurrencyAndWalletName(currencyName, walletName);
if (Objects.isNull(walletInfo)) {
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}
// address values is expected
if(address){
String addressValue = walletInfo.getAddress();
return new ResponseEntity<String>(addressValue, HttpStatus.OK);
}
else {
Long walletId = walletInfo.getId();
return new ResponseEntity<Long>(walletId, HttpStatus.OK);
}
}
間、
var url = "/rest/wallets/?" + "currencyName=" + selectedCurrency + "&" + "walletName=" + walletName;
がされている特定のオプションのパラメータをaccomodateanするためのコードを変更これは今正しい?
いい考えです。どうすれば 'boolean true'を出さないか、' String'を返すのでなければ 'Long'を返します。 – Arefe
はい、戻り値の型を選択するか、LongとStringの両方の値(単純なDTOオブジェクトを使用する場合)を返すための追加のパラメータを追加できます。 – Shchipunov
質問が更新され、コードが提供されました。あなたは一見をしていただけますか? – Arefe