根据 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不是一个抽象类,而是一个接口:
@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 时开始收到错误。有人能够做到这一点吗?
谢谢!