Spring Boot+Thymeleaf表单传值跳转页面404问题求助
问题分析与解决方案
我来帮你拆解下当前遇到的问题核心,以及对应的修复步骤:
核心问题定位
你遇到的404错误,本质是表单提交的目标地址与Controller映射不匹配,同时处理表单提交的方法逻辑存在错误:
- 表单的
action="/edit",但你的Controller里并没有POST /edit的映射,只有POST /edit/{id},所以提交后找不到对应接口,触发404。 - 负责处理表单提交的
searchIdPOST方法存在三处错误:- 方法名拼写错误:
serachId应为searchId - 错误使用
@PathVariable获取参数:表单提交的参数是请求参数,不是路径变量,应该用@RequestParam - 重定向地址写法错误:
new ModelAndView("'/edit")是无效格式,无法正确带参数跳转
- 方法名拼写错误:
具体修复步骤
1. 修正表单提交目标
把表单的action改为指向处理提交的/searchId接口,而不是直接指向/edit:
<form method="post" action="/searchId"> <h1>Please input the number</h1> <input type="text" name="id" /> <input type="submit" value="Send" > <br> <a th:href="@{/}">Back enter display</a> </form>
2. 修复Controller的表单提交处理方法
重新编写/searchId的POST方法,正确获取表单输入的id并跳转到目标编辑页面:
@RequestMapping(value="/searchId", method = RequestMethod.POST) public String searchIdPost(@RequestParam("id") int id) { // 通过redirect前缀跳转到带id参数的编辑页面GET请求 return "redirect:/edit/" + id; }
3. 优化编辑页面的映射方法(可选)
你的/edit/{id} GET方法中,id的类型是int但MyData的id是long,可以直接把路径变量类型改为long,避免强制转换:
@RequestMapping(value = "/edit/{id}", method = RequestMethod.GET) public ModelAndView edit(@ModelAttribute MyData mydata, @PathVariable long id, ModelAndView mav) { mav.setViewName("edit"); mav.addObject("title", "edit mydata"); mav.addObject("id",id); Optional<MyData> data = repository.findById(id); mav.addObject("formModel",data.get()); return mav; }
修复后流程说明
- 在表单输入id并点击提交,请求发送到
POST /searchId - 该方法获取到输入的id值,通过
redirect:/edit/{id}跳转到编辑页面的GET请求 GET /edit/{id}接口正常加载对应数据,展示编辑页面
这样就能解决你遇到的跳转问题啦。
内容的提问来源于stack exchange,提问作者matu
相关产品推荐
相关产品推荐

