【问题标题】:How to solve " No mapping for GET HTTP URL"如何解决“GET HTTP URL 没有映射”
【发布时间】:2019-01-26 14:33:54
【问题描述】:

我正在使用 spring mvc + hibernate 开发 webapp。我收到警告

WARN  [org.springframework.web.servlet.PageNotFound] (default task-1) No mapping for GET /ProjectFE/deleteproducts/

这是我的控制器映射删除产品代码:

@DeleteMapping(value="/deleteproducts/{productId}")
    public String deleteProduct(@PathVariable("productId")int productId) {
        IProductsDAO ip = new ProductsDAOImpl();
        boolean b = ip.deleteProduct(productId);
        if(b)
            return "success";
        else
            return "deleteproducts";
    } 

jsp视图:

   <body>
<form id="update product form" action="${pageContext.request.contextPath}/deleteproducts" style="display: none;">
    <div class="form-group row">
        <label for="product Id" class="col-sm-2 col-form-label">Id</label>
        <div class="col-sm-10">
            <input type="text" name="productId" class="form-control" id="productId" placeholder="Enter the product Id you want to delete">
            <button class="btn btn-default" type="submit">
                <span class="glyphicon glyphicon-search"></span>
            </button>
        </div>
    </div>  
</form>
</body>

删除方法调用的DAO实现:

public boolean deleteProduct(int productId)
    {
        boolean b = true;
        try
        {
            sess.beginTransaction();
            Products p = (Products)sess.load(Products.class, new Integer(productId));
            sess.delete(p);
            sess.getTransaction().commit();
        }catch(Exception ex)
        {
            sess.getTransaction().rollback();
            b = false;
        }
        return b;
    }

这个问题会因为/{productId} 部分而发生吗?请有人帮忙!! 谢谢。

【问题讨论】:

  • 我发现了你的问题。我更新了我的答案。请检查

标签: spring hibernate spring-mvc web-applications


【解决方案1】:

首先,创建一个控制器去deleteproduct.jsp 页面。所以写一个像

这样的控制器
@GetMapping(value="/delete")
    public String deleteProduct() {
            return "deleteproducts";
}

所以点击/delete 进入页面然后做你想做的事。

将您的 @DeleteMapping 更改为 @GetMapping。并使用@RequestParam 而不是@PathVariable。所以你的控制器会像

   @GetMapping(value="/deleteproducts")
    public String deleteProduct(@RequestParam(value="productId")String productId) {
        IProductsDAO ip = new ProductsDAOImpl();
        boolean b = ip.deleteProduct(Integer.parseInt(productId));
        if(b)
            return "success";
        else
            return "deleteproducts";
     } 

然后像

这样写你的表格
 <form id="searchForm" class="form-horizontal" action="${pageContext.request.contextPath}/deleteproducts">
                        <div class="input-group">
                            <input name="productId" placeholder="Delete product with id" class="form-control productId"
                                   type="text">
                            <span class="input-group-btn">
                               <button class="btn btn-default" type="submit">
                                   <span class="glyphicon glyphicon-search"></span>
                               </button>
                             </span>
                        </div>
                    </form>

【讨论】:

  • 非常非常非常非常感谢,这段代码对我来说非常好,抱歉回复晚了
  • @Mob_Abominator 我的荣幸!
【解决方案2】:

您正在尝试获取一个不存在的端点。为什么? 当您指定 endpoint /some_end_point 并尝试使用 http 协议访问它时,它会期望您指定 请求方法(GET / POST / PUT / DELETE /等等……)。

当你有这 2 个参数 /some_end_point + POST 你需要像这样在你的服务器端映射它 -> @PostMapping("/some_end_point")。 如果客户端(或另一台服务器)将尝试到达/some_end_point + GET 它将失败,因为它不存在,只有 /some_end_point + POST 存在,因此您必须添加另一个端点,它将是 @ 987654329@等。

【讨论】:

  • 是的,正如您和@Avijit Barua 指出的那样,我认为这有点可疑,所以我解决了这个问题,谢谢你顺便说一句。
【解决方案3】:

您正在发送一个 GET 请求, 但是您使用 @DeleteMapping 进行了注释 - 它需要一个 DELETE 请求。

【讨论】:

  • 但是deletemapping无论如何都不接受方法参数,那么为什么我会遇到这个问题?我需要在哪里更改我的代码?
猜你喜欢
  • 2020-07-30
  • 2019-09-27
  • 2023-04-02
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多