Вы можете попробовать полностью изменить архитектуру.Разделить основную сущность с помощью связанных коллекций.
Предоставьте независимую услугу для добавления / удаления / установки статусов для вашей организации.Таким образом, вы можете легко предоставлять REST-услуги своему клиенту, которые будут понятны для использования.
Вот набор возможных методов, реализованных через интерфейс REST:
@Path(../foo)
@Produces
public interface FooService {
//CRUD methods on Foo itself which work with attributes of Foo only
...
@GET
@Path("/{fooId}")
FooDTO findById(@PathParam("fooId") int fooId);
//status-related methods:
@GET
@Path("/{fooId}/status")
List<SimpleDto> statuses(@PathParam("fooId") int fooId);
@Post
@Path("/{fooId}/status")
void addStatus(@PathParam("fooId") int fooId, int statusId);
@DELETE
@Path("{fooId}/status")
void deleteStatus(@PathParam("fooId") int fooId, int statusId);
@PUT
@Path("/status")
void setStatuses(@PathParam("fooId") int fooId, List<Integer> newStatuses);
}
СВ этом решении также есть несколько альтернативных вариантов, я бы предпочел вернуть:
@GET
@Path("/{fooId}/status")
List<Integer> statuses(@PathParam("fooId") int fooId);
Вместо списка DTO.А затем предоставит сервис для получения всех статусов с их именами без подключения к Foo:
public interface StatusService {
List<SimpleDto> statuses();
}
Чтобы упростить реализацию компонентов GUI, вы можете создать сервис Rest, который будет возвращать объединенные данные, как в вашем втором FooDto.версия.Это также уменьшит количество звонков на отдых.Но наличие отдельных методов для работы непосредственно с коллекцией предметов очень поможет.