我使用 GWT-RPC 来获取客户端数据,我的要求是解析有效负载以检索内部数据。我需要记录或保留这些数据以用于指标/监控目的。
我正在使用 Servlet Filter 来拦截 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 或从 RPC 传递自定义对象时,此请求有效负载将变得复杂,并且 GWT-RPC 内部解析机制将来可能会发生变化,这可能会破坏我的代码。我遇到了this,但不确定它是否强大/维护。
还有其他选择吗?任何指示将不胜感激。
RPC
类。解码响应更加困难。您可以将
com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.ResponseReader
与 com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader
一起使用,但您需要在类路径中拥有 JsParser
中的 gwt-dev.jar
;并且您不能在 Web 应用程序中使用 gwt-dev.jar
,因为它包含 servlet API(以及其他);因此,您必须从 gwt-dev.jar
中提取相关类才能在您的网络应用程序中使用它们。
请注意,在这两种情况下,您将重建相同的对象,这些对象将被反序列化以“真正”处理请求,或者被序列化为请求处理的结果。
总而言之,在
RemoteServiceServlet
的方法上使用 AOP 可能会带来更好的运气和更好的性能。
我不确定,如果这就是您正在寻找的,但是记录 parsed 参数的标准方法是重写 AbstractRemoteServiceServlet 的
onAfterRequestDeserialized(RPCRequest rpcRequest)
:RPCRequest 包含服务方法及其所有参数值,以漂亮的 Java 对象的形式解析 RpcToken 等。