即使映射正确,也无法为GET映射

时间:2019-09-05 11:09:49

标签: java spring spring-boot spring-mvc jsp

  
    

2019-09-05 14:02:28.776警告11096 --- [nio-8080-exec-3]     o.s.web.servlet.PageNotFound:没有GET的映射     / company / delete

  

我有一个使用Spring Boot和JSP页面的CRUD项目。

这是控制器删除方法

import logging

class RecordCounter:
    _instance = None
    _count = 0

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance

    def count(self):
        self._count += 1
        return self._count

class ContextFilter(logging.Filter):
    def filter(self, record):
        record.record_number = RecordCounter().count()
        return True

logging.basicConfig(
    level=logging.DEBUG,
    format='%(record_number)s %(asctime)s %(message)s %(name)s')
logger = logging.getLogger(__name__)
logger.addFilter(ContextFilter())


有一种方法可以显示JSP页面中的所有优惠券:

@PostMapping("delete/{coupid}")
    public String removeCoupon(@PathVariable int coupid) {

        couponService.deleteById(coupid);

        return "couponRemoved";
    }

只需将每个优惠券添加到模型中,然后重定向到显示带有循环的所有优惠券的页面:

@GetMapping("/read")
public String getAllCoupons(Model theModel) {

    List<Coupon> theCoupon = companyService.getCurrentCompany().getCoupons();

    theModel.addAttribute("theCoupon", theCoupon);

    return "showAllCoupons";
}

正如您在JSP c:forEach循环中看到的那样,我还包括了href链接:

<table class="i">
    <tr>
               <th>id</th>
               <th>title</th>
               <th>start</th>
               <th>end</th>
               <th>amount</th>
               <th>type</th>
               <th>message</th>
               <th>price</th>
               <th>image</th>
           </tr>

<c:forEach var="tempCoupon" items="${theCoupon}" >
<tr> 
<td> ${tempCoupon.coupid} </td>
<td> ${tempCoupon.title} </td>
<td> ${tempCoupon.startd} </td>
<td> ${tempCoupon.endd} </td>
<td> ${tempCoupon.amount} </td>
<td> ${tempCoupon.type} </td>
<td> ${tempCoupon.message} </td>
<td> ${tempCoupon.price} </td>
<td> ${tempCoupon.image} </td>
<td><a href="${pageContext.request.contextPath}/company/delete?coupid=${tempCoupon.coupid}"> Remove ${tempCoupon.coupid} </a></td>

</tr>
</c:forEach>

</table>

它将当前优惠券放入循环中,并将其ID放入链接中。

当我运行它并单击“删除”时,我得到了这个信息:

  

2019-09-05 14:02:28.776警告11096 --- [nio-8080-exec-3]   o.s.web.servlet.PageNotFound:没有GET的映射   / company / delete

1 个答案:

答案 0 :(得分:2)

在您的请求中,您将coupid用作PathVariable,而不是RequestParam,因此也要像这样发送

例如:

<td><a href="${pageContext.request.contextPath}/company/delete/${tempCoupon.coupid}"> Remove ${tempCoupon.coupid} </a></td>

因此基本上可以像/company/delete/123那样访问您的资源,而您正尝试像/company/delete?coupid=123这样来访问它。

,您实际上是在发送GET请求,但您的资源是POST,因此请将其更改为GET,如下所示:

@GetMapping("delete/{coupid}")
public String removeCoupon(@PathVariable int coupid) {

     couponService.deleteById(coupid);

     return "couponRemoved";
}