【问题标题】:Handling Put requests on Java side在 Java 端处理 Put 请求
【发布时间】:2014-04-03 07:23:19
【问题描述】:

我有一个动态 Web 项目,我在其中使用 apache cxf 和 HTTP。现在我以前处理过 POST 和 GET 请求。

在 java 方面,我会使用注释 @GET/@POST 等,并且可以从 UI 向它发出请求。

我刚刚阅读了有关 PUT 请求的信息,但我无法在上述场景中很好地放置它。据我了解,PUT 用于添加数据或上传数据。现在,我不明白的是

  1. Java 端如何处理 PUT。我可以在这里举个例子吗(链接)。
  2. 为什么要使用 PUT?即使我想添加一些信息或上传,我也可以使用 POST 来做同样的事情,然后将其添加到我的数据源中。

【问题讨论】:

  • PUT 用于编辑/更新现有资源。它是 CRUD 模型中的 U。如何处理服务器端完全取决于您
  • @TimCastelijns PUT 在资源尚不存在时(理论上)也在 CRUD 中扮演 C 的角色
  • 这是真的 :-) 忘了提

标签: java put


【解决方案1】:

HTTP PUT 由带有 @PUT 注释的方法处理。

@PUT
@Path("/foo/{id}")
@Consumes(MediaType.APPLICATION_JSON)
public Response putAFoo(@PathParam("id") int theId, Foo theFoo) {
  // Save theFoo which has theId or do what you want with it.
  if (fooWasCreated) {
    return Response.created("/foo/" + theId).build();
  } else {
    return Response.ok().build();
  }
}

为什么要使用 PUT?通常 PUT 用于更改已知资源的服务器端状态。如果您可以通过完整的 URI 寻址资源,则可以使用此 URI 来获取它的表示。您还可以使用资源的 new 表示形式将其放入此 URL。

如果 ID 由服务器控制,PUT 也用于创建新资源。一个请求

PUT /foo/123

可以用来

  1. 覆盖/foo/123
  2. 创建/foo/123

这与通常在集合资源上请求的 POST 不同。

POST /foo/

使用新资源的表示会导致服务器为新资源分配一个 ID。然后服务器会返回这样的响应:

201 Created
Location: /foo/456

【讨论】:

    【解决方案2】:
    1. Apache CXF http-binding page 上有一个@PUT 示例。

    2. 为什么要使用 PUT?那么,在 RESTful 应用程序中,您可能希望例如为实体实现添加/编辑功能,例如 MyEntity

      现在,添加将在一个链接上进行,例如:/myApplication/myEntityPOST 方法上,而编辑将在/myApplication/myEntity/id 上继续,但在PUT 上。 GET 请求也将继续上一个链接/myApplication/myEntity/idDELETE 也是如此。

      您基本上是以标准、直接的方式为MyEntity 提供CRUD 操作支持。当然,您可以通过POST 来执行PUTDELETE 操作,这也可以。

      您可以阅读更多关于 RESTful 网络服务 here 以及更多关于 PUT vs POST here 的信息。

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2014-08-26
      • 2017-04-03
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2017-10-21
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多