在Java端处理Put请求

时间:2014-04-03 07:23:20

标签: java put

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

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

我刚刚阅读了PUT请求,我无法在上述方案中做得很好。据我所知,PUT用于添加数据或上传数据。现在,我不明白的是

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

2 个答案:

答案 0 :(得分:4)

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来获取它的表示。您还可以使用资源的表示来PUT到此URL。

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

PUT /foo/123

可以用来

  1. 覆盖/foo/123
  2. 创建/foo/123
  3. 这与通常在集合资源上请求的POST不同。

    POST /foo/
    

    表示新资源会导致服务器为新资源分配ID。然后服务器将返回如下响应:

    201 Created
    Location: /foo/456
    

答案 1 :(得分:2)

  1. Apache CXF http-binding page上有一个@PUT示例。

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

    现在,添加会在/myApplication/myEntity方法上的POST之类的链接上进行,而编辑将在/myApplication/myEntity/id上进行,但在PUT上进行。 GET请求也会发送到上一个链接/myApplication/myEntity/id,同样适用于DELETE

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

    您可以阅读有关RESTful网络服务here的更多信息,以及PUT vs POST here上的更多内容。