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
相关产品推荐
相关产品推荐

