1

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 つのフィールドは、子クラスからのものであることに注意してください。

4

0 に答える 0