ContentProviderBean という抽象クラスがあり、次に抽象クラスを拡張する Java Bean (簡単にするために ExtendsContentProviderBean と呼びます) を使用して、追加のフィールドを含めます。
親と子の追加フィールドを含む Json 応答を生成したいと考えています。だから私は ObjectResponse を作成しました。これは次のように行う必要があります。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ObjectResponse {
@XmlElement
private String result;
@XmlElement
private ContentProviderBean object;
public void setResult(String result) {
this.result = result;
}
public void setObject(ContentProviderBean object) {
System.err.println("ContentProviderBean::: " + object);
this.object = object;
}
}
setObject の System.err 行は、サブクラス ContentProviderBean (ExtendContentProviderBean) のすべてのフィールドを正常に表示していますが、Json 応答には親 (ContentProviderBean) のフィールドのみが含まれています。
次のコードは、私が使用しているテスト コードの一部であり、本番環境で上記のコードを実行します。 小さな Java サーバー tjws、および ClientRequest と ClientResponse (org.jboss.resteasy.client.ClientRequest) を使用します。
@Test
public void testObjectEndpoint() throws Exception{
final String contentEndpoint = ENDPOINT + "/object/{guid}";
logger.info("testing endpoint: " + contentEndpoint);
ClientRequest request = new ClientRequest(contentEndpoint);
request .pathParameter("guid", "SOMEGUID_25")
.accept(MediaType.APPLICATION_JSON);
ClientResponse<String> response = request.get(String.class);
System.err.println(response.getEntity());
logger.info("Response Entity:: JSON: " + response.getEntity());
}
実際の実装では Jackson を使用し、正しい Json オブジェクトを正常に返します。 つまり、親フィールドと ExtendsContentProviderBean のフィールドが含まれます。
では、Jackson を使用する実際の実装として、テスト ケースが正しい JSON オブジェクトを返さないのはなぜでしょうか?
編集:Jsonの例を示すように求められました。
testObjectEndpoint() メソッドのサンプル Json を次に示します。
{
"result":"success",
"object":{
"creationDate":"2013-09-10T16:08:00-04:00",
"defaultImg":"http:\/\/someurl2",
"objectId":25,
"securityDescriptor":"sec desc 2",
"title":"title 2",
"userId":"user id 22"
}
}
以下は、Jackson プロバイダーが返す Json です。
{
"result":"success",
"object":{
"objectId":"25",
"userId":"user id 22",
"creationDate":1378843680000,
"securityDescriptor":"sec desc 2",
"title":"title 2",
"defaultImg":"http://someurl2",
"contentType":"CONTENT",
"size":3,
"lastEditDate":1378843680000
}
}
Jackson が返す Json の最後の 2 つのフィールドは、子クラスからのものであることに注意してください。