返回200响应代码而不是204

时间:2012-02-18 18:42:50

标签: java response httpresponse

这是我使用标题参数和正文创建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。 有什么想法吗?

1 个答案:

答案 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。