【问题标题】:Spring MVC :URI not workingSpring MVC:URI 不起作用
【发布时间】:2016-08-01 14:18:02
【问题描述】:

我正在使用以下 URL 发送请求,但收到 404 错误。 在服务器上出现警告:找不到带有 URI 的 HTTP 请求的映射

URI 是

http://localhost:8080/webstore/products/tablet/price;low=200;high=400?manufacturer="谷歌"

使用的控制器中的方法是

@RequestMapping(value="/products/{category}/{ByCriteria}",method=RequestMethod.GET)
public String getSpecificProductByFilter(@PathVariable("category")String ProductCategory,@MatrixVariable(pathVar= "ByCriteria") Map<String,List<Long>> filterParams,@RequestParam String manufacturer,Model model){
    model.addAttribute("products",productService.getfilterproducts(ProductCategory,filterParams, manufacturer));
    return "products";
}

类别在 URI 中表示“平板电脑”

标准表示“低”和“高”

制造商是“google”

【问题讨论】:

  • 你的映射如果是/product/...,但你的实际路径是/products/...。这里的s 不会被 Spring 神奇地忽略。
  • @JBNizet 我已经相应地改变了路径,但我面临着我之前面临的同样的问题
  • 你能发布 web.xml 吗?
  • 我以类似的方式尝试过一切对我来说都很好。可能还有其他问题

标签: spring spring-mvc


【解决方案1】:

对于那些不知道的人,这是来自 Amuthan G 的“Spring MVC 初学者指南”一书。这个问题确实很老,但我会给出我的解决方案,以防万一有人需要它,就像我今天一样。

首先你的@RequestMapping 是错误的。它应该是这样的:

@RequestMapping(value="/{category}/{ByCriteria}", method=RequestMethod.GET)

原因是您已经在整个控制器类上拥有@RequestMapping("/products")(在您的类声明之上)。因为你想映射 webstore/products/tabletNOT webstore/products/products/tablet 您必须离开从此方法映射的“产品”。

第二件事是你的 URI。我知道书中有这个,它并不是什么大问题,但如果您不想遇到问题,请在 Google 一词旁边留下引号。这是因为你不想拥有价值“谷歌”,而只是没有这些引号的谷歌,如果你让它们在那里,你将在比较值时遇到问题。所以你的 URI 应该是这样的。

http://localhost:8080/webstore/products/tablet/price;low=200;high=400?manufacturer=Google

要获得完整的解决方案,您必须执行以下步骤:

  1. 在您的存储库和服务接口和类中写入方法:

    List&lt;Product&gt; getProductsByManufacturer(String manufacturer);

    并以与您编写方法 GetProductsByCategory 相同的方式实现它。

  2. 在您的存储库和服务接口和类中写入方法:

    Set&lt;Product&gt; getProductsByPrice(Map&lt;String, List&lt;String&gt;&gt; priceParams);

    并以与您编写方法 getProductsByFilter 相同的方式实现它。

  3. 最后在Controller类中写方法:

    @RequestMapping("/{category}/{ByPrice}")
    public String filterProducts(@PathVariable("category") String productCategory,
            @MatrixVariable(pathVar = "ByPrice") Map<String, List<String>> filterParams,
            @RequestParam String manufacturer, Model model) {
        List<Product> byCategory = productService.getProductsByCategory(productCategory);
        List<Product> byManufacturer = productService.getProductsByManufacturer(manufacturer);
        Set<Product> byPrice = productService.getProductsByPrice(filterParams);
        byCategory.retainAll(byManufacturer);
        byCategory.retainAll(byPrice);
        model.addAttribute("products", byCategory);
        return "products";
    }
    

    在我的项目中,这个方法看起来像这样,但你当然可以用更短的方式来做。完成这些步骤后,您的项目应该可以工作了。如果没有,请随时在那里问我。如果您不知道如何在第 1 步和第 2 步中编写方法,我会为您注释那里的代码,但它几乎与我所说的另一种方法相同。我希望这会对某人有所帮助。

【讨论】:

  • 我正在看同一本书,感谢您的帮助!
猜你喜欢
  • 2012-01-02
  • 2017-04-22
  • 2013-11-22
  • 2010-11-23
  • 2012-01-07
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多