rest / javax / jersey / grizzly:是否必须为POST请求返回OK(200)响应代码?

时间:2016-01-17 02:32:01

标签: java rest jersey grizzly

想象一下REST后端点,例如:

@POST
@Path("/cbo/{param1}/{param2}")
public Response updateCbo() {
    //do something
    return Response.status(Response.Status.OK).build();
}

我的问题是:如果一切顺利,最好是返回OK响应还是默认为默认?我看到GET查询通常不会打扰返回响应,只返回请求的内容,而Web客户端确实会获取200 OK标题。

感谢。

2 个答案:

答案 0 :(得分:3)

您根本不必返回响应,假设您有一个POST(或任何其他函数)类型调用,在响应请求中您要返回一个String(或任何对象)如果你使用像杰克逊这样的序列化器那就重要了)

你可以这样做:

@POST
@Path("/cbo/{param1}/{param2}")
public String updateCbo() {
    //do something
    return "My Response"
}

泽西岛将自动返回200。如果将该函数设置为void,则Jersey将自动返回204(成功 - 无内容)。

如果您希望呼叫失败,您可以提出异常。

答案 1 :(得分:3)

当POST到创建新资源时,普遍接受的是发送回201 Created状态,Location标头设置新资源的URI。您可以在this post中看到一个完成此操作的示例。

如果你只是更新一个资源,而不是POST,通常是用PUT完成的,那么通常的方法是在成功时发送204 No Content而不是201。实施例

@PUT
@Path("/cbo/{param1}/{param2}")
public Response updateCbo(Model updated,
                          @PathParam("param1") String param1,
                          @PathParam("param2") String param2) {
    Model model = modelServive.lookup(param1, param2);
    if (model == null) 
        return Response.notFound().build();
    model = PropTranferUtils.transfer(model, updated);
    modelService.update(model);
    return Response.noContent().build();
}