RestyGWT のドキュメントによると、これを機能させるには抽象スーパークラスを使用する必要があります。たとえば、次のようになります。
@JsonSubTypes(@Type(value=PersonImpl.class, name="PersonImpl"))
@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="@class")
public abstract class Person{
public abstract String getName();
public abstract void setName(String name);
}
@JsonTypeName("PersonImpl")
public class PersonImpl extends Person{
private String name;
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
定義されたエンコーダー/デコーダーを使用すると、これが機能します。
Person personInstance = new PersonImpl();
personInstance.setName("TestName");
PersonCodec codec = GWT.create(PersonCodec.class);
JSONValue json = codec.encode(personInstance);
私は非常に似たようなことをしようとしていますが、小さな違いがあります。つまり、Personが抽象クラスである代わりに、Interface にしたいのです。
@JsonSubTypes(@Type(value=PersonImpl.class, name="PersonImpl"))
@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="@class")
public interface Person{
public String getName();
public void setName(String name);
}
何らかの理由でこれが機能していないようです.JsonEncoderDecoderが生成されるとすぐにエラーが発生し始めます. 誰かがこれを達成できましたか?
ありがとう!