Смешайте BeanParam с параметрами тела - PullRequest
0 голосов
/ 05 марта 2020

Я получил интерфейс службы 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 частью пути запроса и сделать остальные атрибуты передаются в теле запроса без повторения этой информации в сигнатуре метода?

...