java - SpringMVC中的@ModelAttribute注解是可有可无的吗?
问题描述
在学习SpringMVC中的使用Controller接受表单的值,按照《Spring实战》中的代码,Controller如下:
@RequestMapping(value = '/register', method = POST) public String processRegistration(Spitter spitter) {System.out.println(spitter.getUsername());spitterRepository.save(spitter);return 'redirect:/spitter/' + spitter.getUsername(); }
打印那行是我自己加的,用来验证表单的值是否绑定到了Spitter对象而Spring官方的教程中在Spitter前面多了一个@ModelAttribute注解,但是在这个例子里面产生的效果和不加似乎是一样的,都能够绑定表单信息到对象中,所以想问下这个注解的功能?在这个例子中是不是即使不显示写也能有一样的功能?
问题解答
回答1:不是的,@ModelAttribute有两个作用,一个是取出数据,也就是将数据从请求中取出来封装到controller方法的参数中一个是将这个数据放置到Model中,这样你就可以在jsp页面中使用EL表达式取出数据并显示
回答2:如果在参数上加了@ModelAttribute 注解,再执行@RequestMapping之前会先找到@ModelAttribute中的key,如果没有@ModelAttribute ,如何没有或者没有获取到则会通过反射实例化一个spitter对象,再通过request拿到你set到对象里面的值。虽然结果是一样的,但是走的流程不一样。
回答3:虽然有它自己特点,但是用了这么久,都没用上过,我觉得可以忽略 @ModelAttribute
相关文章:
1. javascript - gulp-nodemon 使用重启express 服务器的时候端口被占用2. android-studio - android studio自带模拟器中的本地“图库”所对应的路径是什么?3. node.js - yo webapp构建项目时报错了,如图4. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?5. java - 微信开发遇到一个 bug。。access_token 有关的6. 【python小白】 问关于之初始化一次对象的问题7. thinkphp中Controller里面使用Request::File(’image’);8. MYSQL5.7以及postgresql,他们的JSON模式下的查询和存储性能如何!9. html5 - 目前 公司App 嵌入H5页面 做个 手机支付功能 没有做过 所以 请求各位有经验的 给个思路10. python 多进程如何调试

网公网安备