序列化:找不到所需序列化对象的不可序列化组件
Posted
技术标签:
【中文标题】序列化:找不到所需序列化对象的不可序列化组件【英文标题】:Serialization: Can't find non-serializable component of desired serialized object 【发布时间】:2017-08-05 00:13:00 【问题描述】:我得到了一个应该被序列化的对象。 Atm 我让它实现 Serializable 但在运行时我得到一个
Failed to marshal object with optimized marhshaller: $heresAhugeString$
Failed to serialize object: $alsoHugeString$
java.io.IOException: Externalizable class doesn't have default constructor: interface java.io.Externalizable
Externalizable class doesn't have default constructor: interface java.io.Externalizable
java.io.Externalizable.<init>()
最后一个异常(java.io.Externalizable.() 无限次出现) 我试图找到不可序列化的字段,但我只能看到它在序列化 ConcurrentHashMap 时引发异常。我知道这不是很多信息,但完整的堆栈跟踪非常大。 任何提示如何找出地图中的哪个字段负责非序列化?或者我应该添加哪些信息? 问候
【问题讨论】:
这对你有帮助吗 -Externalizable class doesn't have default constructor
但是不知道是指哪个类...
@Abubakkar 是正确的。序列化时,需要默认构造函数来实例化序列化的类。你没有。
异常不会“无限次出现”。映射中的每个键或值都会出现一次。查看堆栈跟踪的末尾。
@EJP 我认为不是。但有可能。在调试器中有一行 cause = NoSuchMethodException@129509 并且它有一个具有相同行的孩子,依此类推......(id始终相同)
【参考方案1】:
我不知道你在做什么类型的反序列化,但是如果你解组后不需要使用这个字段,那么你必须将它设置为transient
。
transient
java 关键字可以在你使用 Java 序列化时使用,@Transient
如果你使用 JPA,甚至 @JsonIgnoreProperties
如果你使用 Jackson
【讨论】:
以上是关于序列化:找不到所需序列化对象的不可序列化组件的主要内容,如果未能解决你的问题,请参考以下文章