Spring @ModelAttribute注解命名规则疑问:参数名需与对象名一致吗?
@ModelAttribute 名称与方法参数名的匹配规则
嘿,我来帮你理清这个问题——@ModelAttribute 指定的名称和方法里的参数变量名完全不需要一致,这俩是完全独立的东西,我给你拆解下:
先看你的两个示例:
- 示例(a)里
@ModelAttribute("pet") Pet pet:这里的"pet"是这个对象存到Spring Model里的key,而pet只是方法内部用来引用这个对象的变量名,刚好同名只是巧合而已。 - 示例(b)里
@ModelAttribute("cat") Dog rex:这种写法完全合法!"cat"是Model中的key,后续在视图里如果要取这个对象,就得用${cat};而rex只是方法里的变量名,你在方法体里用rex来操作这个Dog对象就行,和Model里的key半毛钱关系都没有。
- 示例(a)里
背后的逻辑:
@ModelAttribute的value属性本质是给当前请求的Model指定一个属性名称,用来存这个绑定后的对象;而方法的参数名只是你在Java代码里操作这个对象的标识符,Spring根本不会把这俩关联起来。补充个小细节:
如果你不写@ModelAttribute的value,比如@ModelAttribute Dog rex,Spring会默认用参数类型的首字母小写作为Model的key——也就是这里会用dog作为key,和变量名rex还是没关系。
举个更直观的运行示例:
@PostMapping("/animal/test") public String testAnimal(@ModelAttribute("myAnimal") Dog myDog) { // 方法内用变量名myDog操作对象 myDog.setName("旺财"); // 视图模板中要获取这个对象,得用Model的key:${myAnimal} return "animalView"; }
这段代码完全可以正常运行,没有任何问题。
内容的提问来源于stack exchange,提问作者Magiranu
相关产品推荐
相关产品推荐

