我有一个名为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的最后两个字段来自子类。