Как решить "Нет сопоставления для GET HTTP URL" - PullRequest
0 голосов
/ 26 января 2019

Я работаю над webapp, используя spring mvc + hibernate. Я получаю предупреждение как

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>

DAOImplementation для вызова метода delete:

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}? Пожалуйста, помогите! Thankyou.

Exception generated when hitting the url

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Сначала создайте контроллер, чтобы перейти на страницу 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>
0 голосов
/ 27 января 2019

Вы пытаетесь получить конечную точку, которая не существует.Зачем?Когда вы указываете конечную точку /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, поэтому вам нужно добавить другую конечную точку, которая будет @GetMapping("/some_end_point") и т. Д.

0 голосов
/ 26 января 2019

Вы отправляете запрос GET, но вы аннотировали @DeleteMapping, который ожидает запрос DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...