0
webservice呼び出し用のJSONを出力するためにJerseyとJAXBを使用しています。ドメインモデルクラスからジェネリック型のクラス階層を持っています。クラス:私のwebサービスでJAXBでポリモーフィズムとジェネリッククラス階層を使用する方法
@XmlRootElement
public class OfferDto extends BaseEntity<String> {
private String name;
private String description;
// ...
}
public class OfferListResponse extends BaseListResponseImpl<OfferDto> {
}
public abstract class BaseListResponseImpl<T> implements BaseListResponse<T> {
private List<T> data;
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}
public interface BaseListResponse<T> extends Serializable {
public List<T> getData();
}
私は返す:
OfferListResponse resp = offerService.getOfferList(params);
Response.status(Response.Status.OK).entity(resp).build();
が、私のJSONはとして出力されている:
{"data":["[email protected]","[email protected]", ..."}]}
JAXBがオブジェクトフィールドを適切に出力する代わりにtoStringメソッドを呼び出しているようです。
私は任意の継承せずにクラスに直接具体的なタイプを使用する場合:
@XmlRootElement
public class OfferListResponse {
private List<OfferDto> data;
// ... getters and setters
}
今では正常に動作します。
JAXBで多態性クラスと汎用クラス階層を使用するために必要なことを理解しようとしていますか?