我正在自己的 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";
}
答案 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)方法。 我希望你能服务。