测试中的JSON输出不包括子类字段

时间:2013-09-13 19:16:37

标签: java json rest jackson httpresponse

我有一个名为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中的字段。

那么为什么测试用例没有返回正确的JSon对象作为真正的实现,它使用了Jackson?

编辑:我被要求展示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"
   }
}

这是杰克逊提供者返回的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的最后两个字段来自子类。

0 个答案:

没有答案