Вы можете использовать GWT RPC следующим образом на клиенте:
Создание службы
private void refreshWatchList() {
final double MAX_PRICE = 100.0; // $100.00
final double MAX_PRICE_CHANGE = 0.02; // +/- 2%
StockPrice[] prices = new StockPrice[stocks.size()];
for (int i = 0; i < stocks.size(); i++) {
double price = Random.nextDouble() * MAX_PRICE;
double change = price * MAX_PRICE_CHANGE
* (Random.nextDouble() * 2.0 - 1.0);
prices[i] = new StockPrice(stocks.get(i), price, change);
}
updateTable(prices);
}
Определение службы
@RemoteServiceRelativePath("stockPrices")
public interface StockPriceService extends RemoteService {
StockPrice[] getPrices(String[] symbols);
}
Реализация сервиса
public class StockPriceServiceImpl extends RemoteServiceServlet implements StockPriceService {
public StockPrice[] getPrices(String[] symbols) {
// TODO Auto-generated method stub
return null;
}
}
Вызов службы от клиента и сделать вызов удаленной процедуры:
private ArrayList<String> stocks = new ArrayList<String>();
private StockPriceServiceAsync stockPriceSvc = GWT.create(StockPriceService.class);
private void refreshWatchList() {
// Initialize the service proxy.
if (stockPriceSvc == null) {
stockPriceSvc = GWT.create(StockPriceService.class);
}
// Set up the callback object.
AsyncCallback<StockPrice[]> callback = new AsyncCallback<StockPrice[]>() {
public void onFailure(Throwable caught) {
// TODO: Do something with errors.
}
public void onSuccess(StockPrice[] result) {
updateTable(result);
}
};
// Make the call to the stock price service.
stockPriceSvc.getPrices(stocks.toArray(new String[0]), callback);
}
Это в основном то, что делается RPC.
Ваш
ключи в средней
, вероятно, является результатом сериализации ваших объектов. Если вам это не нравится, вы также можете использовать GWT RequestBuilder
.
RequestBuilder requestBuilder = new RequestBuilder(requestMethod, url);
requestBuilder.setHeader("Content-Type", "application/json");
requestBuilder.setRequestData(bodyString);
requestBuilder.setCallback(new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
callback.onResponse(response.getStatusCode(), response.getText());
}
@Override
public void onError(Request request, Throwable exception) {
callback.onError(new Exception(exception));
}
});
try {
requestBuilder.send();
}
catch(RequestException ex) {
callback.onError(ex);
}
При использовании RequestBuilder у вас больше контроля над форматом и тем, что перевозится.
Пожалуйста, добавьте подпись метода удаленной процедуры, которую вы вызываете. – Baz
У вас * вы * сделали какое-либо исследование, прежде чем задавать этот вопрос? GWT является открытым исходным кодом, и довольно легко отслеживать «виновника» - проверить классы, созданные на ваших интерфейсах '* Async' компилятором GWT, посмотреть, какие классы используются там и следовать по тропе, пока не найдете схему сериализации , Или google вокруг ... –