Java GWT请求有效负载理解

Java GWT请求有效负载理解,java,gwt,rpc,Java,Gwt,Rpc,若你们看下面,当我在我的应用程序中进行RPC调用时,我的有效负载是否会进入服务器 7 | 0 | 14|http://domain.com/ager-online/tracklay/|7fccbc6f7b44bb2eb84aab8b47db2e4 | com.d.g4.consumer.w.client.rpcservice.ConsumerService | placeService | java.util.List | java.util.ArrayList/4159755760 | co.

若你们看下面,当我在我的应用程序中进行RPC调用时,我的有效负载是否会进入服务器

7 | 0 | 14|http://domain.com/ager-online/tracklay/|7fccbc6f7b44bb2eb84aab8b47db2e4 | com.d.g4.consumer.w.client.rpcservice.ConsumerService | placeService | java.util.List | java.util.ArrayList/4159755760 | co.g.consumer.wager.client.model.ConsumernseType/2494043886 | java.lang.Double/858496421 | java.lang69 | java.util.Date/3385151746 | 1 | 2 | 3 | 4 | 1 | 5 | 6 | 1 | 7 | 8 | 2 | 9 | 1 | 10 | 11 | 12 | 13 | Co3 | 14 |**UZOKS**9 | 30915 |

我知道它正在被序列化并将数据发送到服务器。我想知道的是中间的钥匙。像Uzc1OKs我在请求中标记了它们

它们到底是什么


有什么想法吗?

你试过这个开源工具吗?

以下是有效载荷元素说明:

您可以通过以下方式在客户端上使用GWT:

创建服务

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);
}

使用RequestBuilder时,您可以更好地控制格式和传输内容。

GWT默认使用协议缓冲区作为序列化机制。您可以在此处找到更多信息:

请添加您正在调用的远程过程的方法签名。在提出此问题之前,您做过任何研究吗?GWT是开源的,应该很容易找到“罪魁祸首”——检查GWT编译器从
*Async
接口生成的类,查看其中使用的类,并跟踪跟踪,直到找到序列化方案。或谷歌周围…GWT不使用协议缓冲区的RPC实现!然而,关于这个话题已经有了一些讨论(参见示例)
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);
    }