You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf报NumberFormatException:字符串{departId}转Long错误如何解决?

问题根因

你的怀疑完全正确,问题就出在Thymeleaf的th:action路径变量配置上。
Thymeleaf的@{} URL表达式中如果定义了路径占位符{departId},必须显式指定占位符对应的实际取值,否则Thymeleaf不会做变量替换,会直接把{departId}作为字符串拼接进最终的请求路径。后端收到请求时,Spring需要将路径中的{departId}字符串转换为Long类型的部门ID,自然就抛出了类型转换异常。

修复方案

有两种常用的修复方式,任选其一即可:

方式1:直接从页面绑定的departForm对象取ID

因为你的页面已经通过th:object="${departForm}"绑定了DTO对象,直接取departForm的id字段作为路径参数即可,修改th:action配置为:

th:action="@{/department/list/{departId}/edit(departId=${departForm.id})}"

方式2:从Model中单独取departId参数

你也可以在GET编辑页面的Controller方法中,提前把部门ID放入Model:

@GetMapping("/department/list/{departId}/edit")
public String updateForm(@CurrentUser Account account,
                         @PathVariable("departId") Department department,
                         Model model) {
    model.addAttribute(account);
    model.addAttribute("departId", department.getId()); // 新增这行
    model.addAttribute(modelMapper.map(department, DepartForm.class));
    return "department/edit";
}

再修改th:action配置为:

th:action="@{/department/list/{departId}/edit(departId=${departId})}"
验证方法

修改完成后重启服务,打开浏览器开发者工具查看页面form标签的action属性,确认路径已替换为类似/department/list/123/edit(123为实际部门ID)的格式,即可正常提交请求。

内容的提问来源于stack exchange,提问作者Jaeyeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:54:01