java - 返回 200 响应代码而不是 204

标签 java response httpresponse

这是我使用 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/

相关文章:

android - 尝试读取 httpResponse 时套接字关闭异常

Java : Semaphore: Producer Consumer: Threads and ThreadGroup

java - Spring Data JPA 中的动态@Query WHERE 子句

java - 我的 Treeset 仅添加 1 个类对象

java - 我想从一个 Activity 调用两个 ContentView

angular - HTTP错误的响应主体内的对象

python - 使用 django HttpResponse 返回二进制数据

xml - 测试 XML 响应的最佳方法是什么?

node.js - 如何将 axios 响应保存到变量,以便在 axios 外部使用?

java - 如何将生成的缓冲图像从 Servlet 传递到响应?