Согласно документации 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. Кто-то смог добиться этого?
Спасибо!