解析 GWT RPC POST 请求/响应

问题描述 投票:0回答:2

我使用 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,但不确定它是否强大/维护。

还有其他选择吗?任何指示将不胜感激。

gwt servlet-filters gwt-rpc
2个回答
5
投票

使用 GWT 中的

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 可能会带来更好的运气和更好的性能。


1
投票

我不确定,如果这就是您正在寻找的,但是记录 parsed 参数的标准方法是重写 AbstractRemoteServiceServlet 的

onAfterRequestDeserialized(RPCRequest rpcRequest)
:RPCRequest 包含服务方法及其所有参数值,以漂亮的 Java 对象的形式解析 RpcToken 等。

© www.soinside.com 2019 - 2024. All rights reserved.