如何在RESTEasy中实现补丁请求?

时间:2014-08-11 23:18:55

标签: jax-rs resteasy

我想在一个Patch请求(json格式)中实现多个操作。 RESTEasy不支持开箱即用的补丁请求。如何提供自定义实现?

1 个答案:

答案 0 :(得分:11)

要启用PATCH,您需要定义使用@HttpMethod注释的注释:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {}

Bill Burke的书" RESTful Java with JAX-RS 2.0"中描述了一个完整的例子。源代码可以在resteasy repository

中找到

也许是JAX-RS 2.1。将support PATCH out of the box

更新:如果要在一个请求中修补多个资源,则需要先识别它们。例如,如果您想为所有客户提供VIP状态,您可以使用这样的资源方法:

@PATCH
@Path("/customers")
public Response patchCustomers(@QueryParam("minTurnover") Double minTurnover, InputStream is) {
   // find and update customers
}

实体正文中传递的信息取决于您。 RFC要求"一系列变更"应该应用于资源。这可能很简单text/plain,如update: vip=true。 此类更新的标准格式为json-patch

PATCH /customers?minTurnover=1000 HTTP/1.1
Content-Type: application/json-patch

[
  { 
    "op" : "replace", 
    "path" : "/vip", 
    "value" : "true" 
  },
  {
    ... more operations ...
  }
]

请注意,应将同一组操作应用于所有已识别的资源。

相关问题