这是我使用标题参数和正文创建Response的方法:
public Response sendOKResponse(request req)
{
ResponseBuilderImpl builder = new ResponseBuilderImpl();
// set the header params.
for(int index =0; index<req.headerParameters.size(); index++)
{
builder.header(req.headerParameters.get(index).getName(), req.headerParameters.get(index).getBody());
}
// set the body and response code
builder.status(Response.Status.OK).entity(req.getBody());
Response r = builder.build();
return r;
}
这就是我返回响应的方式:
Response response;
response = sendBadMesseage();
return response;
此代码返回代码204(无内容)而不是200。 有什么想法吗?
答案 0 :(得分:1)
您不应该使用new
实例化您的响应构建器,JAX-RS抽象层的重点是隐藏实现细节而不是调用客户端。这使得各种供应商实现成为可能,可以随意互换。此外,如果您正在使用JEE6,或希望迁移到它,此代码几乎肯定会失败。大多数JEE6供应商实现都使用CDI,这与概念不兼容new
的使用。但是,更接近主题,JAX-RS实现指定如果响应包装实体为空,则返回204
状态代码。您可能希望验证在任何方法中都不是这种情况。此外,您可能希望对代码进行一些更改:
public Response sendOKResponse(request req) {
ResponseBuilder response = Response.ok();
// set the header params.
for(Header h: req.headerParameters()) {
builder = builder.header(h.getName(), h.getValue());
}
// set the body and response code
builder = builder.entity(req.getBody());
return builder.build();
}
您的sendBadMessage
方法也应与上述类似。您可以在将实体添加到构建器之前对其进行记录,以验证在它为空时只获得204。