【问题标题】:rest/javax/jersey/grizzly: is it mandatory to return OK (200) response code for POST requests?rest/javax/jersey/grizzly:是否必须为 POST 请求返回 OK(200)响应代码?
【发布时间】:2016-01-17 02:32:00
【问题描述】:

想象一个 post REST 端点,例如:

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

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

谢谢。

【问题讨论】:

    标签: java rest jersey grizzly


    【解决方案1】:

    您根本不必返回响应,假设您有一个POST(或任何其他函数)类型调用,在响应请求中您想要返回一个字符串(或任何对象)如果您使用的是像 Jackson 这样的序列化程序)

    你可以这样做:

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

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

    如果您希望调用失败,您可以引发异常。

    【讨论】:

      【解决方案2】:

      当发布到创建新资源时,一般接受的方法是发回201 Created 状态,Location 标头设置新资源的 URI。您可以在this post 中查看实现此目的的示例。

      如果您只是更新一个资源,而不是 POST,通常使用 PUT 完成,而不是 201,一般的方法是在成功时发送 204 No Content。示例

      @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();
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-16
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2020-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多