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

Spring Boot整合Thymeleaf时movieDTO缺失、重定向路径失效问题求助

问题1:访问/addMovie报错、movieDTO接收值为空的原因

触发问题有三个核心原因:

  1. 表单渲染时缺少绑定对象
    /addMovie接口直接返回视图,没有往Model中存入名为movieDTO的空对象,Thymeleaf渲染表单时读取th:object="${movieDTO}"找不到对应的绑定属性,直接抛出异常。
  2. MovieDTO缺少无参构造函数
    Spring MVC通过反射实例化DTO完成参数绑定,必须依赖无参构造方法。当前MovieDTO仅定义了全参构造,Spring无法完成对象实例化,就算表单可以正常提交,也没法注入参数,拿到的自然是空值。
  3. 参数校验顺序错误
    create方法中BindingResult参数没有紧跟被@Valid注解修饰的movieDTO,Spring不会把校验结果存入当前BindingResult对象,参数校验逻辑不生效。

修复代码

修改/addMovie接口,存入空绑定对象:

@RequestMapping("/addMovie")
public String add(Model model) {
    model.addAttribute("movieDTO", new MovieDTO());
    return "movie/movie-add";
}

给MovieDTO补充无参构造函数:

public MovieDTO() {
}

调整create方法参数顺序:

@RequestMapping(value = "/saveMovie", method = RequestMethod.POST)
public String create(@ModelAttribute("movieDTO") @Valid MovieDTO movieDTO, BindingResult result, Model model) {
    // 原有逻辑不变
}

问题2:重定向无法识别movies-all路径的原因

触发问题有两个核心原因:

  1. 重定向路径使用了相对路径,当前写法redirect:movie/movies-all是相对请求路径/saveMovie解析的,最终会被解析为/saveMovie/movie/movies-all,和预期路径不符。
  2. 混淆了视图路径和请求路径:redirect:后面跟的是后端请求接口路径,不是视图文件的存储路径,需要先定义对应接口映射返回movies-all视图,再重定向到这个接口的路径。

修复代码

先新增全量电影列表的请求映射:

@RequestMapping("/movies-all")
public String listAll(Model model) {
    movieService.showMovies(model);
    return "movie/movies-all";
}

修改重定向写法为绝对路径:

// 替换原有重定向代码
return "redirect:/movies-all";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 23:33:01