В Джерси при использовании Джексона для сериализации JSON дополнительные атрибуты реализующего подкласса не включаются. Например, с учетом следующей структуры класса
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="@class")
@JsonSubTypes({
@JsonSubTypes.Type(value = Foo.class, name = "foo")
}
public abstract class FooBase {
private String bar;
public String getBar() {
return bar;
}
public void setBar( String bar ) {
this.bar = bar;
}
}
public class Foo extends FooBase {
private String biz;
public String getBiz() {
return biz;
}
public void setBiz( String biz ) {
this.biz = biz;
}
}
и следующий код Джерси
@GET
public FooBase get() {
return new Foo();
}
Я получаю обратно JSON
{"@class" => "foo", "bar" => null}
Но то, что я на самом деле хочу, это
{"@class" => "foo", "bar" => null, "biz" => null}
Кроме того, в моем файле web.xml я включил POJOMappingFeature , чтобы решить эту проблему
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
Редактировать: Исправлен Java-код для правильной установки сеттеров и Foo, чтобы не быть абстрактным