Я хотел бы реализовать несколько операций в одном запросе Patch (json format). RESTEasy не поддерживает запросы Patch из коробки. Как обеспечить пользовательскую реализацию?
Как реализовать исправления в RESTEasy?
Ответ 1
Чтобы включить PATCH
, вам необходимо определить аннотацию, аннотированную с помощью @HttpMethod:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {}
Полный пример описан в книге Билла Берка "RESTful Java с JAX-RS 2.0". Код исходного кода можно найти в репозитории репозитория.
Возможно, JAX-RS 2.1. будет поддерживать PATCH из коробки.
Обновление:. Если вы хотите исправлять несколько ресурсов в одном запросе, вам нужно сначала идентифицировать их. Например, если вы хотите, чтобы все клиенты с определенным оборотом в статусе 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 ...
}
]
Обратите внимание, что для всех идентифицированных ресурсов должен применяться тот же набор операций.