Java Spring Thymeleaf按钮动作创建失败:类型转换异常排查
问题解决方法
核心错误原因
你的报错是因为Thymeleaf的th:action属性里多了一个多余的单引号:
th:action="@{/bookUpdate/(id=${books.id})'}"
这个单引号导致Thymeleaf没有解析${books.id}表达式,反而把(id=${books.id})'作为字符串传递给后端,后端试图把这个字符串转成Integer类型的id,自然抛出格式异常。
具体修复步骤
1. 修正bookList.html中的表单action
把多余的单引号去掉,同时删掉无用的隐藏输入框,正确的表单代码:
<form class="form-inline my-2 my-lg-0" th:action="@{/bookUpdate/(id=${books.id})}" th:object="${books}" method="get"> <button class="btn btn-secondary my-2 my-sm-0" type="submit">Edit</button> </form>
2. 优化BookController的bookListUpdate方法
方法里的@Valid BookDto book参数完全无用,会导致Spring尝试从请求中绑定不存在的对象,直接删除即可;同时注意视图返回路径要和bookList保持一致(如果你的页面放在views目录下):
@GetMapping("/bookUpdate/{id}") public String bookListUpdate(@PathVariable(value = "id") Integer id, Model model) { model.addAttribute("book", service.findById(id)); return "views/bookUpdate"; }
3. 额外检查点
- 确认
service.findById(id)能正确返回对应Book对象,避免空指针异常 - 确保
bookUpdate.html里的编辑表单正确绑定${book}的属性,比如用th:field="*{topic}"这类写法填充表单字段
内容的提问来源于stack exchange,提问作者Anastasia
相关产品推荐
相关产品推荐

