Как добавить новый вспомогательный ресурс в стандартный объект Intershop AbstractResourceObject

#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:

  1. Вам нужно добавить новый класс Java, расширяющий com.intershop.component.rest.capi.resource.AbstractRestResource
  2. Зарегистрируйте реализацию в файле компонента
 <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>
  
  1. Создайте экземпляр реализации в файле компонента
 <instance with="YOUR_NAME" name="YOUR_INSTANCE_NAME">
    <fulfill requirement="name" value="YOUR_SUBRESOUCE_NAME" />
</instance>
  
  1. Добавить как 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
}