在 CatalogEndpoint 中需要一个新方法:findAllProductsForCategory

Need a new method in CatalogEndpoint: findAllProductsForCategory

我有 REST API 工作,但我需要一种方法来 return 特定类别中的所有产品。现在我正在使用 findSearchResultsByCategoryAndQuery 通过传递类别 ID 并使用 very 通用查询来获取类别中的几乎所有产品。我真正需要的是一种名为 findAllProductsForCategory 的方法,它 return 包含类别中的所有产品。

我是 Broadleaf 和 REST 的新手 API,有人可以指导我如何扩展 CatalogEndpoint 以获得我需要的功能。

尽管 broadleaf 提供 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。确保您有相应的产品模型来绑定结果