В моей нынешней архитектуре, у меня есть ресурс JAX-RS, который находится позади:Как перенаправить запрос REST на другой ресурс?
/categories
/categories/{catId}
, который реализуется так:
@Path("/categories")
@Produces("application/json")
public class CategoryResourcesApi {
@GET
public Response getCategories() {
// ...
}
@GET @Path("/{catId}")
public Response getCategory(@PathParam("catId") String catId) {
// ...
}
// ...
}
и еще один, который служит:
/products
/products/{prodId}
и имеет аналогичную реализацию:
@Path("/products")
@Produces("application/json")
public class ProductResourcesApi {
@GET
public Response getProducts() {
// ...
}
// ...
}
Помимо этих простых путей, я также должен служить следующие:
/categories/{catId}/products
/categories/{catId}/products/{prodId}
, которые были бы продукты, относящиеся к определенной категории.
Самое естественное, что нужно сделать, это сделать ProductResourcesApi
служить им, но, кстати, я понимаю структуру аннотаций JAX-RS, это может быть подано только CategoryResourcesApi
(или, в конечном итоге, третьим классом, я думаю).
Я использую @Context
и другие аннотации в моих реализациях ресурсов, поэтому прямой new ProductResourcesAPI().getProducts()
не будет работать, я думаю.
Есть ли способ переслать один путь ресурса в другой в рамках JAX-RS (или Джерси)? Какие у меня есть другие варианты? Я хотел бы сохранить все это легко, если это возможно, и поэтому я выбрал один ресурс для каждого корневого пути с субресурсами внутри.
Ну, если вы не можете положить его вместе с JAX-RS, то вы можете подумать об использовании простых сервлетов (с маршрутизацией в web.xml) и использовать GSON (или нечто подобное), чтобы создать выход JSON. Возможно, вам понадобится немного больше рукописного кода, но вы получите гибкость. – erosb
@erosb Не вариант: помимо простоты, предлагаемой этими фреймворками, я использую [Swagger] (http://swagger.io/) для документации API, которая интегрируется с ними для создания документов. – watery