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

SpringBoot使用SweetAlert2展示消息时访问success路径报500错误如何解决

问题根本原因

你遇到的报错核心原因有两点:

  1. Spring MVC中redirect:开头的重定向属于客户端跳转,Model里存储的属性仅在当前请求生命周期有效,不会随重定向传递到下一个GET请求。你在saveProject接口中存入Model的message对象,重定向到/success的GET请求时已经丢失。
  2. 初始版本的/success对应控制器方法没有往Model中存入message对象,同时success.html模板中没有做空值判断,Thymeleaf渲染时读取${message.icon}时message为null,就抛出了EL1007E: Property or field 'icon' cannot be found on null的错误。你给success接口加固定的message赋值只是临时解决了报错,但灵活性很差,如果后续需要返回不同的提示内容(比如保存失败的提示)就无法适配。
更优解决方案

推荐使用Spring提供的RedirectAttributes传递重定向参数,搭配模板空值校验,既解决参数传递问题,也能兼容直接访问页面的场景:

步骤1:修改Post接口参数,使用Flash属性传递消息

Flash属性会临时存储在Session中,重定向后自动清除,不会残留冗余数据:

@PostMapping("/saveproject")
public String saveProject(RedirectAttributes redirectAttributes, @ModelAttribute project project)
{
    System.out.println("Project detail coming from view is  : "+project);
    // 用addFlashAttribute存储重定向传递的参数
    redirectAttributes.addFlashAttribute("message", new helper("success", "Successfully save project."));
    return "redirect:/success";
}

步骤2:给模板加空值校验,避免直接访问报错

使用Thymeleaf的安全导航运算符?.判断对象是否为空,同时给JS设置默认值,避免无消息时前端报错:

<script type="text/javascript">
// 安全取值,message为null时返回空字符串
var icon = "[[${message?.icon}]]" || 'info';
var title = "[[${message?.title}]]" || '操作完成';

// 仅当有有效消息时才弹出提示
if("[[${message}]]" != "null"){
    Swal.fire({
        position: 'top',
        icon: icon,
        title: title,
        showConfirmButton: false,
        timer: 1500
    }) 
}
</script>

这个方案的优势:

  • 不需要修改/success的GET接口逻辑,支持传递不同类型的提示(比如操作失败的error类型提示)
  • 避免用户刷新成功页面重复提交表单的问题
  • 兼容用户直接访问/success路径的场景,不会抛出500错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:18:03