这是我使用 header 参数和正文创建响应的方法:
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。 有什么想法吗?
最佳答案
您不应该使用 new
实例化您的响应构建器,JAX-RS 抽象层的全部要点是隐藏实现细节,以防止调用客户端。这使得不同供应商的实现可以随意互换。另外,如果您正在使用 JEE6,或者希望迁移到它,那么这段代码几乎肯定会失败。大多数 JEE6 供应商实现都使用 CDI,这与 new 的使用在概念上不兼容。但是,更接近主题的是,JAX-RS 实现指定如果响应包装的实体为 null,则返回 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
方法也应与上面类似。您可以在将实体添加到构建器之前记录您的实体,以验证您仅在实体为 null 时才收到 204。
关于java - 返回 200 响应代码而不是 204,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344054/