当前位置: 首页 > 知识库问答 >
问题:

控制器未正确处理路径变量-启动Spring

阴凯歌
2023-03-14

我有一个有一些订单的客户列表,我把他们都显示在一个表中。我添加了一个按钮,以便删除每个订单,如果需要的话。

<table id="customers">
        <tr>
            <th>Customer</th>
            <th>Order</th>
            <th>Action</th>
        </tr>
        <div th:each="customer : ${customers}">
          <tr>
            <td th:text="${customer.name}" style="font-weight: bold;"></td>
            <td></td>
            <td></td>
          </tr>
          <tr th:each="order : ${customer.orders}" >
            <td></td>
            <td th:text="${order.name}">
            <td>
                <a th:href="@{/manager/customer/{cid}(cid=${customer.id})/order/{oid}(oid=${order.id})}" class="button">Remove order</a>
            </td>
          </tr>
        </div>
</table>
@GetMapping("/manager/customer/{cid}/order/{oid}")
    public String deleteCustomerOrder(@PathVariable(value="cid") Long cid, @PathVariable(value="oid") Long oid, Model model) {

        Customer c = customerService.findCustomerById(cid);
        //do stuff

        return "/manager/customerOrders";
    }

当我试图删除一个特定的订单时,我会得到以下错误

未能将类型“java.lang.String”的值转换为所需类型“java.lang.Long”;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“{cid}(cid=${customer.id})”

路径如下所示:http://localhost:8080/manager/customer/%7bcid%7d(CID=$%7bcustomer.id%7d)/order/2

我拿身份证的方式做错了吗?

共有1个答案

方献
2023-03-14

所有参数都应该一起定义。更改href如下:

<a th:href="@{/manager/customer/{cid}/order/{oid}(cid=${customer.id}, oid=${order.id})}" class="button">Remove order</a>

请参阅在Thimeleaf文档中添加参数一节或本教程

 类似资料:
  • 这让我很困惑。而不是使用一个路径变量值的正确URLhttp://somedomain.com:8080/someWebApp/essays/main/student/25/activity/add“(其中25是路径变量{code>{studentId}}的值)我在我的URL中得到这个值:”http://somedomain.com:8080/someWebApp/essays/main/stude

  • 所以比正确答案更重要的是,我真的很想知道为什么这不起作用。 下面是一些我无法使用的示例代码: 如果我像这样对着它打一个卷曲:

  • 谁能建议我该怎么做才能绕过这个问题?我以为Spring会把第一个破折号之前的任何东西作为ID,把后面的任何东西作为名称,但事实并非如此。 如果我使用/product/1-name执行GET,它工作得很好。如果path变量包含破折号,这似乎是一种奇怪的行为。 谢谢

  • 我在启动我的Weblogic管理服务器时看到以下错误: 我尝试在boot.properties中更改密码,但无法启动门户管理控制台。我还尝试通过删除boot.properties文件从控制台提供值,但仍然没有帮助。我需要提供

  • 在我的Mac OS应用程序中,我包含了一个Python.framework(v 2.7),所以我将其添加到“链接框架”中作为必需。同样在应用程序中,我正在使用NSTask启动一个Python脚本,如下所示: 当我构建应用程序时,在Python脚本中检查它与一起使用的版本,它返回: [“/用户/...脚本路径.../内容/资源“,”/库/框架/Python.framework/Versions/2.

  • (我更喜欢)或 只需使用调用,值应存储在该请求的某个位置。 我知道可能更简单,因为它已经击中了正确的,但我更喜欢。 我刚刚意识到,不能像预期的那样工作,因为Spring Security总是首先处理请求。不过我需要一个拦截器在Spring安全启动之前处理它。