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

为什么Spring MVC重定向时model添加的person未像hobby一样拼接至URL

问题代码示例

@PostMapping("/regist")
public String regist(Person person, Model model) {
    Person p = new Person("name", "age");
    model.addAttribute("person", p); //add person to model
    model.addAttribute("hobby", "reading");
    return "redirect:/info";
}

@GetMapping("/info")
public String info() {
    return "result";
}

现象原因解释

  • Spring MVC处理带redirect:前缀的重定向请求时,会由RedirectView组件负责把Model中的属性转换为URL查询参数,转换前会校验属性是否符合拼接规则。
  • RedirectView默认的属性校验规则isEligibleProperty()仅会将简单类型的属性纳入URL参数:包含字符串、基本数据类型、基本类型包装类、日期、Locale,以及上述类型的数组/集合,这类值可以直接转换为合法的URL字符串。
  • 自定义POJO类(比如示例中的Person)属于复杂类型,默认无法被直接序列化为URL参数的键值对,因此会被RedirectView过滤,不会出现在重定向的URL里。

可选解决方案

如果需要传递Person类的相关参数到重定向地址,可选择两种实现方式:

  1. 手动拆解Person属性存入Model:将p.getName()、p.getAge()分别作为独立属性调用model.addAttribute()存入,简单属性会自动拼接为URL参数。
  2. 如果不希望参数暴露在URL中,可以改用RedirectAttributes的addFlashAttribute()方法存储复杂对象,该类对象会临时存入Session,重定向完成后自动清除,目标接口可以直接获取对应值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:06