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インターフェースを使用して、JSONPersonを逆シリアル化できます。

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

ただし、PersonインターフェイスをPersonクラスに置き換えると、「com.xxx.xxx.Personはインターフェイスではありません」というAutoBeanFactoryGenerator例外が発生します。

単純な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.encode、JSONにシリアライズする

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