GWT:枚举列表抛出“无法反序列化响应”

Posted

技术标签:

【中文标题】GWT:枚举列表抛出“无法反序列化响应”【英文标题】:GWT: List of enums throws "could not deserialize response" 【发布时间】:2012-09-25 08:05:22 【问题描述】:

我有一个简单的 POJO,它有一些属性,其中一个是枚举。这工作得很好,但是当我将枚举属性更改为枚举列表时,GWT 给了我一个序列化异常“无法反序列化响应”。

这行得通:

public class Report implements Serializable, Comparable<Report> 

    private static final long serialVersionUID = 1L;

    private long id;
    //some more attributes, all serialize fine
    private ReportCategory category; // the enumeration 

    public ReportSVO()
    
        //.. generated getters and setters

当我将 private ReportCategory category; 更改为 private List&lt;ReportCategory&gt; categories; 时,我得到了(反)序列化异常。

出于预感,我将枚举更改为内部类:(public enum ReportCategory...public class ReportCategory private Name categoryName; public enum Name...)就像魔术一样,它可以工作。 这个问题引出了两个问题:

    这是一个 GWT 错误吗?还是我错过了什么? 有没有更好的方法来解决这个问题?

枚举本身不应该是一个问题,因为它以前可以工作(并且枚举默认情况下是可序列化的)。此外,当我在其他 GWT 类上忘记了无参数构造函数或具有不可序列化的属性时,序列化异常消息如下所示:“com.google.gwt.user.client.rpc.SerializationException: Type '...'不包含在可以通过此 SerializationPolicy 序列化的类型集中.."

我正在使用 GWT 2.4

【问题讨论】:

【参考方案1】:

事实证明,我的问题的原因是服务器端的 POJO 类(报告)与该类的编译为 javascript 的版本不匹配。这是因为我更改了类并将其重新发布到服务器,但忘记重新编译客户端代码...

所以在服务器端,属性是一个列表,而在客户端,它仍然是一个枚举,反序列化当然失败了。

总而言之,这是一个面子,但我希望这个线程在未来对某人有所帮助。

【讨论】:

以上是关于GWT:枚举列表抛出“无法反序列化响应”的主要内容,如果未能解决你的问题,请参考以下文章

GWT JPA - 无法反序列化响应

GWT错误:无法反序列化响应

Export-AzureRmAutomationDscConfiguration 无法反序列化响应

GWT 2.3 升级后的 RPC 错误

GWT:响应无法反序列化

如果已删除枚举项,则将Json反序列化回列表或枚举会导致错误[重复]