如何解决“ GET HTTP URL没有映射”

时间:2019-01-26 14:33:54

标签: spring hibernate spring-mvc web-applications

我正在使用Spring MVC + Hibernate开发Webapp。我收到警告

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

这是我的Controller映射删除产品代码:

@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>

DAOImplementation用于删除方法的调用:

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;
    }

Project structure for Front End

是否由于/{productId}部分而发生此问题?请一些帮助! 谢谢。

Exception generated when hitting the url

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您正在尝试获取不存在的端点。为什么? 当您指定一个端点 /some_end_point并尝试通过http协议访问该端点时,它会期望您指定请求方法(获取/发布/输入/输入/删除/等...)。

当拥有这两个参数/some_end_point + POST时,您需要像这样-> @PostMapping("/some_end_point")在服务器端进行映射。 如果客户端(或其他服务器)尝试访问/some_end_point + GET,则它将失败,因为它不存在,只有/some_end_point + POST存在,因此您有添加另一个端点@GetMapping("/some_end_point"),依此类推。

答案 2 :(得分:0)

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