Я получил интерфейс службы REST на основе JAX-RS (CXF). Обычно для запросов, которые работают с существующим объектом, идентификатор объекта является частью пути запросов, где изменения, которые должны быть применены, являются частью тела. Это может выглядеть так:
@PUT
@Path("/entities/{entityId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
Entity update(@PathParam("entityId") final String entityId, final Entity entity);
Но Entity
уже имеет поле id, и я хочу избежать дублирования этой информации. Поэтому мне интересно, можно ли использовать @BeanParam
с параметром Entity
и пометить поле id с помощью @PathParam("entityId")
. Другие (или все) атрибуты Entity
должны, конечно, все еще быть частью тела запроса.
Я попытался определить Entity
следующим образом:
public class Entity {
@PathParam("entityId")
public void setId(String id) { ... }
public String getId() { ... }
public void setName(String name) { ... }
public String getName() { ... }
}
и сделал Entity
a @BeanParam
@PUT
@Path("/entities/{entityId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
Entity update(@BeanParam final Entity entity);
Атрибут ID теперь правильно используется для построения пути запроса. Но атрибут имени Entity
на стороне службы пуст, поскольку Entity
не добавляется в тело запроса.
Существует ли возможность сделать атрибут ID частью пути запроса и сделать остальные атрибуты передаются в теле запроса без повторения этой информации в сигнатуре метода?