如何在RESTful Web服务中使用泽西框架抛出HTTP 204状态代码?

2022-09-03 03:58:15

我正在使用球衣框架来开发RESTful Web服务。我使用以下代码抛出各种带有响应的HTTP状态代码:

public class RestNoContentException extends WebApplicationException 
{
    public RestNoContentException(String message) 
    {
        super(Response.status(Status.NO_CONTENT)
            .entity(message).type("text/plain")
            .build());
        }
}

在使用 Firefox Mozilla rest 客户端工具测试 REST Web 服务时,它显示的是状态而不是 。我正在处理其他状态代码,就像我对状态代码所做的那样。其他状态代码在 rest 客户端工具上正确显示,但何时显示状态代码,它显示状态代码。200 OK204 NO CONTENT204204200 OK

有人可以在这里帮助我吗?我错过了什么?


答案 1

首先,204 属于响应代码的“成功”类别,因此,由于异常而返回它是一件非常非常奇怪的事情。

其次,204 表示“无内容”,表示响应不包含任何实体,但您可以在其中放置一个实体。泽西岛很可能正在为您将其转换为200,这与204基本相同,只是它包含响应实体。

最后,您可以通过几个内置行为非常简单地获得 204 个响应:void 方法和 null 返回值都映射到 204 响应。否则,只需返回 。Response.status(204).build()


答案 2

如果你想抛出204,你不应该给实体:

@GET
@Produces(MediaType.TEXT_PLAIN)
public Response test() {
    //return Response.status(Status.NO_CONTENT).entity("hello").build(); //this will throw 200
    return Response.status(Status.NO_CONTENT).build();
}