【问题标题】:How to deserialize exceptions on client received from server如何反序列化从服务器接收到的客户端异常
【发布时间】:2012-07-30 15:56:25
【问题描述】:

我有一个客户端 (JVM1) 以 RESTful 方式与服务器 (JVM2) 通信。我正在使用 JSON 作为有效负载机制。

当服务器抛出异常时,我可以将其序列化为 JSON 格式并通过网络发送。在客户端,我收到响应并查看 JSON 格式的内容。

问题是我无法识别正在抛出的异常的特定类型。

给定 JSON 格式的某些异常的序列化版本(可能是 NullPointerException、IllegalStateException,甚至是检查异常),我如何在客户端构造相同类型的对象。

如果需要,我可以添加任何包装类并在客户端和服务器之间共享。

提前致谢。

【问题讨论】:

    标签: java json cxf jax-rs deserialization


    【解决方案1】:

    一般来说,在客户端反序列化任意异常是一个坏主意。例如,服务器可以抛出一个 SQLException 的子类,该子类恰好特定于正在使用的 jdkc 驱动程序 impl。客户端很可能没有在其类路径中包含 jdbc 驱动程序,因此任何反序列化异常的尝试都会导致某种疯狂的类加载异常。最好的办法是将异常转换为像“ServerException”这样的通用类,并将相关细节作为该类的字符串成员(例如原始异常名称、消息、堆栈跟踪等)。

    【讨论】:

    • 感谢您的回答。完全同意你的看法。但是,我说的是两个 JVM 中都可用的异常。这方面的一个例子是 JDK 的例外。我仍然想知道我所问的在技术上是否可行。
    • @Chris - 那么,您用于将 java 对象转换为 JSON 的框架无法处理反向过程?
    • 没有。它无法做到这一点。我正在使用杰克逊 1.9.8 ObjectMapper mapper = new ObjectMapper(); mapper.readValue(inputStream, MyException.class);
    猜你喜欢
    • 2013-10-25
    • 2019-10-26
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多