#intershop
#intershop
Вопрос:
Я хочу ввести новый вспомогательный ресурс в стандартный Intershop ProductResource, не теряя контекста ресурса продукта.
Например, в коде моего ресурса я хочу знать о продукте, на который ссылается клиент REST /product/SOME/my-sub-resource
Как я могу это сделать?
Ответ №1:
В «Cookbook — REST Framework» есть рецепт:
Добавьте ресурс в существующий REST API https://support.intershop.com/kb/index.php/Display/28269L
Ответ №2:
- Вам нужно добавить новый класс Java, расширяющий
com.intershop.component.rest.capi.resource.AbstractRestResource
- Зарегистрируйте реализацию в файле компонента
<implementation name="YOUR_NAME"
implements="AbstractRestResource"
class="YOUR_FQNAME_TO_IMPL_CLASS"
factory="JavaBeanFactory">
<requires name="name" contract="String" cardinality="1..1" />
<requires name="subResource" contract="RestResource" cardinality="0..n" />
</implementation>
- Создайте экземпляр реализации в файле компонента
<instance with="YOUR_NAME" name="YOUR_INSTANCE_NAME">
<fulfill requirement="name" value="YOUR_SUBRESOUCE_NAME" />
</instance>
- Добавить как
subResource
вintershop.WebShop.RESTAPI.ProductResource
экземпляр
<fulfill requirement="subResource"
of="intershop.WebShop.RESTAPI.ProductResource"
with="YOUR_INSTANCE_NAME"/>
После этого ваш ресурс будет доступен в /product/SKU/YOUR_SUBRESOURCE_NAME
. Убедитесь, что ваш класс impl имеет открытый метод, и этот метод аннотируется javax.ws.rs.GET
и javax.ws.rs.Produces
@GET
@Produces("application/json")
public SomeRO get()
{
ApplicationBO applicationBO = provider.get();
ProductBORepository productBORep = applicationBO.getRepository(ProductBORepositoryExtension.EXTENSION_ID);
ProductBO product = productBORep.getProductBOBySKU(getParent().getName());
// Do the stuff you want with the product
}