2

我正在使用 GWT-RPC 来获取客户端数据,我的要求是解析有效负载以检索内部数据。我需要记录或保留这些数据以用于度量/监控目的。

我正在使用 Servlet 过滤器来拦截 HTTP 请求。我可以看到请求看起来像这样 -

5|0|7|http://localhost:8080/testproject|   
29F4EA1240F157649C12466F01F46F60|com.test.client.GreetingService|
greetServer|java.lang.String|myInput1|myInput2|1|2|3|4|2|5|5|6|7|

是否有任何标准机制来解析这些数据?我担心编写自己的代码来解析这不是一个好的解决方案,因为当我们将自定义对象传递给/从 RPC 和 GWT-RPC 内部解析机制将来可能会改变时,这个请求负载会很复杂,这可能会破坏我的代码。我遇到了这个,但不确定它是否健壮/维护。

有没有其他选择?任何指针将不胜感激。

4

2 回答 2

4

使用RPCGWT 中的类。
您必须提供序列化策略,其强名称在请求标头中传递。

解码响应更难。您可以com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.ResponseReader与 a 一起使用,com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader但您需要在类路径中有JsParserfrom gwt-dev.jar;并且您不能gwt-dev.jar在 Web 应用程序中拥有,因为它包含 servlet API(以及其他);所以您必须从中提取相关类gwt-dev.jar才能在您的网络应用程序中使用它们。

请注意,在这两种情况下,您都将重构相同的对象,这些对象将被反序列化以“真正地”处理请求,或者作为请求处理的结果被序列化。
总而言之,在你的方法上使用 AOP,你可能会有更好的运气和更好的性能RemoteServiceServlet

于 2012-09-04T10:11:40.173 回答
1

我不确定,如果那是您要查找的内容,但是记录解析参数的标准方法是覆盖 AbstractRemoteServiceServlet 的onAfterRequestDeserialized(RPCRequest rpcRequest):RPCRequest 包含服务方法及其所有参数值、解析的 RpcToken 等好的 Java 对象的形式。

于 2012-09-04T11:42:47.653 回答