关于Vaadin当前显示的对象序列化的NotSerializableException

时间:2015-04-01 10:33:54

标签: java spring hibernate serialization vaadin

当我想要序列化当前由Vaadin显示的Object时,我得到一个NotSerializableException。

结构是这样的:

Vaadin UI< --- serialize / deserialize ---> Hibernate / JPA Postgres数据库

Vaadin显示通过IPC从数据库请求的对象, 但是当我操纵对象并希望再次保存它时 序列化并将其发送到控制器我得到以下例外:

java.io.NotSerializableException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
	at java.util.LinkedList.writeObject(LinkedList.java:1118)
	at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)

我试图:

请求 - >操纵 - >保存|作品

请求 - >在Vaadin中展示 - >在Vaadin中操纵 - >保存|不起作用

为什么Serializer需要AnnotationConfigEmbeddedWebApplicationContext并且有解决方法吗?我可以事先将其删除吗?

1 个答案:

答案 0 :(得分:1)

Spring组件通常不可序列化(或根本不应序列化)。

在Vaadin UI中注入Vaadin组件中的Spring组件是很棘手的,因为它们应该声明为transient并在反序列化后重新填充。

我使用spring-aop可序列化代理编写了一个小型库jdal-aop来简化流程。

例如

public class MainLayout extends VerticalLayout {

    @Autowired
    @SerializableProxy  // make this Dao serializable
    private CustomerDao customerDao;
} 

它可能对你有用。