1

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が生成されるとすぐにエラーが発生し始めます. 誰かがこれを達成できましたか?

ありがとう!

4

1 に答える 1