我已经开始使用dropwizard来开发REST服务器。当资源方法返回一个EntityType(比如enrollment)时,输出如预期的那样,但是我决定使用下面的代码发送自定义状态代码Response.status(Response.Status.PRECONDITION_FAILED)
.entity(Entity.json(new enrolment, AdapterResponseStatus.FAILURE)))
.build();
一切正常,但输出现在包含了一些额外的额外属性,如下所示。
{
"entity":
{
"id": 1267,
"courseId": "5798890",
"userName": "user@abc.com",
"tenantId": "tenant1",
"status": "approved",
"link": "/enrollments/null"
},
"variant":
{
"language": null,
"mediaType":
{
"type": "application",
"subtype": "json",
"parameters":
{
},
"wildcardType": false,
"wildcardSubtype": false
},
"encoding": null,
"languageString": null
},
"annotations":
[
],
"mediaType":
{
"type": "application",
"subtype": "json",
"parameters":
{
},
"wildcardType": false,
"wildcardSubtype": false
},
"language": null,
"encoding": null
}
我期待"实体"属性,但得到其他属性。没有人会去消费它们,有什么办法可以摆脱它们吗?
即使我将实体对象(enrollment)替换为空字符串,也会出现这些标记。
如果你看ResponseBuilder
的entity
方法的签名,它直接取对象;不像Jersey客户端,它需要一个特殊的Entity
对象,碰巧在里面有annotations
和variants
字段。
把你的代码改成:
Response.status(Response.Status.PRECONDITION_FAILED)
.entity(new Enrolment())
.build();