16

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

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

4

2 回答 2

10

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

于 2011-06-07T09:15:03.133 回答
9

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

1) 制作PersonPojo implements Person

2)向工厂添加一个包装器方法:

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

3) 创建包装的 AutoBean 并序列化为AutoBeanCodex.encodeJSON

PersonPojo myPersonPojo = new PersonPojo("joe");
AutoBean<Person> autoBeanPerson = personFactory.person( myPersonPojo );
于 2012-03-27T23:37:09.730 回答