Нужен новый метод в CatalogEndpoint: findAllProductsForCategory

У меня работает REST API, но мне нужен способ вернуть все продукты в определенной категории. Прямо сейчас я использую findSearchResultsByCategoryAndQuery, передавая идентификатор категории и используя очень общий запрос, чтобы получить почти все продукты в категории. Что мне действительно нужно, так это метод с именем findAllProductsForCategory, который возвращает все продукты в категории.

Я новичок в Broadleaf и REST API, может кто-нибудь подскажет, как расширить CatalogEndpoint, чтобы получить необходимую мне функциональность.

1 ответ

Решение

Althought 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)
  • Или, если вы хотите создать свой собственный дао
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. Убедитесь, что у вас есть соответствующая модель продукта для результатов привязки
Другие вопросы по тегам