Spring MVC:添加多个过滤器到列表

时间:2014-12-15 12:51:11

标签: java spring spring-mvc

我正在自己的 Spring MVC 进行练习只是为了学习它而且我被困在一个任务中我有一个url地址,我被要求在假想的网上商店过滤产品。

我想应用多个条件来查看所需的产品;例如,属于平板电脑类别的产品,价格在200美元到400美元之间,并且由Google制造。

网址是: ... / webstore / products / tablet / price; low = 200; high = 400?manufacturer =“Google”

任务是在filterProducts类中创建一个名为productController的请求映射方法,以映射此URL。 URL包含低和高的矩阵变量来表示价格范围,GET参数制造商用于识别制造商,最后是URI模板路径变量数位板来表示类别。

有一个提示,我可能会使用java.util.Set来组合结果以避免重复。

这是我不完整的代码:(我不知道如何解决问题)

@RequestMapping("/{category}/{byCriteria}")
public String getProductsByManufacturer(
        @PathVariable("category") String productCategory,
        @MatrixVariable(pathVar = "byCriteria") Map<String, List<String>> filterParams,
        @RequestParam("manufactuer") String manufacturer, Model model) {


    List<Product> productsCategory = productService.getProductsByCategory(productCategory);

// ???

    model.addAttribute("product", ??);

    return "products";
}

1 个答案:

答案 0 :(得分:0)

我知道那个运动。你能尝试一下:

@RequestMapping("/{category}/{price}")
public String filterProducts(@PathVariable("category") String category,
                             @MatrixVariable(pathVar = "price") Map<String, List<String>> priceParams,
                             @RequestParam("manufacturer") String manufacturer,
                             Model model) {
    Set<Product> filteredProducts = new HashSet<Product>();

    List<Product> productsByCategory = productService.getProductsByCategory(category);
    List<Product> productsByManufacturer = productService.getProductsByManufacturer(manufacturer);
    Set<Product> productsByPrice = new HashSet<Product>();

    BigDecimal low = new BigDecimal(priceParams.get("low").get(0));
    BigDecimal high = new BigDecimal(priceParams.get("high").get(0));
    productsByPrice.addAll(productService.getProductsByPrice(low, high));

    for(Product categoryProduct: productsByCategory) {
        for(Product manufacturerProduct: productsByManufacturer) {
            for(Product priceProduct: productsByPrice) {
                if(priceProduct.equals(manufacturerProduct) && manufacturerProduct.equals(categoryProduct)) {
                    filteredProducts.add(priceProduct);
                }
            }
        }
    }

    model.addAttribute("products", filteredProducts);

    return "products";
}

不要忘记在ProductRepository和Impl上执行getProductsByPrice(low,high)方法。 我希望你能服务。