2016-06-15 1 views
0

REST APIは動作していますが、特定のカテゴリ内のすべての製品を返す方法が必要です。今はfindSearchResultsByCategoryAndQueryを使用しています。カテゴリIDを渡してという非常に一般的なクエリをというように使用して、カテゴリ内のほとんどすべての商品を取得しています。私が本当に必要とするのは、カテゴリ内のすべての商品を返すfindAllProductsForCategoryというメソッドです。CatalogEndpointで新しいメソッドが必要です:findAllProductsForCategory

BroadleafとREST APIの新機能です。私が必要とする機能を得るためにCatalogEndpointを拡張する方法を教えてください。

答えて

0

広範囲に渡ってSQL注入保護(ExploitProtectionServiceImpl)を提供していますが、私はProductDaoを使用することをお勧めします。

  • org.broadleafcommerce.core.web.api.endpoint.catalog.CatalogEndpointを拡張するか、それはしてデータベースを照会していますProductDao
@Resource("blProductDao") 
private ProductDao productDao; 

@RequestMapping(value = "search/products-by-category/{categoryId}") //GET is by default 
public List<Product> findSearchResultsByCategory(HttpServletRequest request, @PathVariable("categoryId") Long categoryId { 
    return productDao.readProductsByCategory(categoryId); 
} 
  • を活用実装新しいメソッドを追加します:
SELECT categoryProduct.product_id 
FROM BLC_CATEGORY_PRODUCT_XREF categoryProduct 
WHERE categoryProduct.category_id = :categoryId 
ORDER BY COALESCE (categoryProduct.display_order,999999) 
  • それとも、あなた自身のDAO
public class MyProductDaoImpl extends ProductDaoImpl implements MyProductDao { 

    public static final String QUERY = "SELECT categoryProduct.product_id " + 
      "FROM BLC_CATEGORY_PRODUCT_XREF categoryProduct " + 
      "WHERE categoryProduct.category_id = :categoryId"; 

    @Override 
    public List<Product> meFindingProductsByCategory(String categoryId) { 
     Query query = em.createQuery(QUERY); 
     query.setParameter("categoryId", categoryId); 
     return query.getResultList(); 
    } 
} 
  • を作成したい場合は、JSONまたはXMLを生産している場合は、選択することができます。バインディング結果に対応する製品モデルがあることを確認してください。
関連する問題