使用POJO类而不是接口的GWT AutoBean



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

我有一个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序列化/反序列化?

你根本做不到。AutoBean生成轻量级、优化的接口实现;对于类,它显然不能做到这一点。这是的设计

如果它是一个简单的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 );

最新更新