我有一个名为 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"
}
}
这是 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
}
}
请注意,杰克逊返回 Json 中的最后两个字段来自子类。