JAXBクラスにJsonTypeInfoで注釈を付けて、多態性クラスを簡単にシリアル化できるようにしました。ただし、Jerseyによってシリアル化されたときに注釈は表示されません。具体的には、ObjectMapperを使用すると表示されますが、リソースの戻り値の型としては表示されません。ジャージー=>ジャクソンの相互作用に問題があるように思われるので、私は今非常に混乱しています。ジャージーでジャクソンを使用しているときにJsonTypeInfoがシリアライズしない
デバッグするには、ジャージサンプルのjsonfromjaxbサンプルを使用して問題をローカライズしました。私はFlightクラスに以下を追加して@classにシリアライズしました。
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")
Iリソースで利用可能な以下の方法だけでJAXBオブジェクトを返す一方と手動クエリ/ jsonfromjaxb /便の
@GET
@Produces({"application/json"})
public synchronized Flights getFlightList() {
return myFlights;
}
@GET
@Path("/object_mapper")
@Produces({"application/json"})
public synchronized String getFlights() throws IOException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(myFlights);
}
結果ObjectMapperを使用するものを持っている
{"flight":[{"flightId":"OK123","company":"Czech Airlines","number":123,"aircraft":"B737"},{"flightId":"OK124","company":"Czech Airlines","number":124,"aircraft":"AB115"}]}
/jsonfromjaxb/flights/object_mapperクエリの結果
{"@class":"com.sun.jersey.samples.jsonfromjaxb.jaxb.Flights","flight":[{"number":123,"company":"Czech Airlines","aircraft":"B737","flightId":"OK123"},{"number":124,"company":"Czech Airlines","aircraft":"AB115","flightId":"OK124"}]}
おかげで、 身代金
ありがとうございました。私は、デバッガを使用して、ジャクソンのライブラリにアクセスしていることを確認しました。そして、低レベルのものを使用していてJAXBのものを使用していなかったことを指摘してくれました。ソリューションの残りの部分には次のものが追加されました。 –
[OK]を偉大な - 私はこれを覚えておく必要があります。私はこれがいくつかのメーリングリスト(ジャージーユーザー)のよくある質問だと思う – StaxMan