带有 POJO 类而不是接口的 GWT AutoBean

Posted

技术标签:

【中文标题】带有 POJO 类而不是接口的 GWT AutoBean【英文标题】:GWT AutoBean with POJO class instead of interface 【发布时间】:2011-06-07 07:03:44 【问题描述】:

我希望有人可以为我的问题提出一个简单的解决方案。

我有一个 POJO,比如说:

public class Person

    private String name;
    public String getName() return name; 
    public void setName(String name) this.name = name; 

我想使用 GWT 的 AutoBean 功能将这个 bean 序列化/反序列化为 JSON,但 AutoBean 需要一个接口:

public interface Person

    public String getName();
    public void setName(String name);

我有一个 AutoBeanFactory 设置:

public interface PersonFactory extends AutoBeanFactory

    AutoBean<Person> person();

使用工厂和 Person 接口,我能够反序列化 JSON Person:

PersonFactory personFactory = GWT.create(PersonFactory.class);
AutoBean<Person> autoBeanPerson = AutoBeanCodex.decode(personFactory, Person.class, jsonObject.toString());
Person person = autoBeanPerson.as();

但是,如果我将 Person 接口替换为 Person 类,我会收到一个 AutoBeanFactoryGenerator 异常,指出:“com.xxx.xxx.Person 不是接口”。

如何在我的简单 POJO 中使用 AutoBean 序列化/反序列化?

【问题讨论】:

【参考方案1】:

你根本做不到。 AutoBean 生成接口的轻量级优化实现;它显然不能为课程做到这一点。这是设计

【讨论】:

我想的也差不多。感谢您的回复。【参考方案2】:

如果它是一个简单的 POJO 并且没有其他 autobean 类型的属性是可能的:

1) 制作PersonPojo implements Person

2) 为工厂添加包装方法:

public interface PersonFactory extends AutoBeanFactory 
    AutoBean<Person> person( Person p ); // wrap existing

3) 创建包装好的 AutoBean 并使用 AutoBeanCodex.encode 序列化为 JSON

PersonPojo myPersonPojo = new PersonPojo("joe");
AutoBean<Person> autoBeanPerson = personFactory.person( myPersonPojo );

【讨论】:

在解码的情况下不可以吗? @NaveedS 不确定您的意思,请详细说明? 不能像AutoBeanCodex.decode(personFactory, PersonPojo.class, jsonObject.toString());那样解码吗? 不是,这是问题中的原始问题。

以上是关于带有 POJO 类而不是接口的 GWT AutoBean的主要内容,如果未能解决你的问题,请参考以下文章

将带有列表的hibernate POJO转换为可序列化的rpc返回对象

GWT Autobean 设置创建接口的初始值

传递实现类而不是接口时的 MissingMethodException

GWT - 如何获取值并决定加载哪个页面

无法将 osgi 服务 bean 公开为类而不是接口

如何正确地将复杂属性 (ArrayList<POJO>) 设置为 GWT BaseTreeModel?序列化问题