我正在使用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或从RPC传递自定义对象时,这个请求有效负载会很复杂,而且将来可能会改变GWT-RPC内部解析机制,这可能会破坏我的码。我遇到了this,但不确定它是否健壮/维护。
还有其他选择吗?任何指针都将受到赞赏。
答案 0 :(得分:4)
使用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
中提取相关的类,才能在您的网络应用中使用它们。
请注意,在这两种情况下,您将重新构建相同的对象,这些对象将被反序列化以处理请求“for real”,或者被序列化为请求处理的结果。
总而言之,在RemoteServiceServlet
的方法上使用AOP,你可能会有更好的运气和更好的表现。
答案 1 :(得分:1)
我不确定,如果这是你正在寻找的,但记录解析的参数的标准方法是覆盖AbstractRemoteServiceServlet的onAfterRequestDeserialized(RPCRequest rpcRequest)
:RPCRequest包含服务方法,包含其所有参数值,解析的RpcToken等,以漂亮的Java对象的形式。