@ModelAttribute 注解及 POJO入参过程
一、modelattribute注解
@ModelAttribute注解的方法有两种,一种无返回值,一种有返回值,方法的可以用@RequestParam注解来获取请求的参数,如果不获取参数,可以不用此注解
1)无返回值,用Map中的对象放入ImpliciteModel中,key就是map中存储的key.
@ModelAttribute
public void setUser(@RequestParam(value="name",required=false) String name, Map<String,Object> map)
{
Address ad=new Address();
ad.setCity("beijing");
ad.setProvince("china");
User u=new User();
u.setAge(15);
u.setAddress(ad);
if(name.equals("xp")){
u.setWork("huajia");
}
else {
u.setWork("gongchengshi");
}
map.put("user", u);
System.out.println(u);
}
2)有返回值 把返回值对象放入ImpliciteModel中,key就是ModelAttribute定义的key:"user"
@ModelAttribute("user")
public User setUser(@RequestParam(value="name",required=false) String name)
{
Address ad=new Address();
ad.setCity("beijing");
ad.setProvince("china");
User u=new User();
u.setAge(15);
u.setAddress(ad);
if(name.equals("xp")){
u.setWork("huajia");
}
else {
u.setWork("gongchengshi");
}
System.out.println("用户"+u);
return u;
}
总结: @ModelAttribute("user")指定key为"user"时,若方法有返回值,则返回值会以指定的key,放入ImpliciteModel中;若方法没有返回值,但是方法中有相同key的map,则存入ImpliciteModel中key的为map中存的对象,若没有相同key的map,则存入ImpliciteModel中key对应的对象为null.若方法有返回值且方法中也有相同key的map,则以map对象优先。
@ModelAttribute没有指定key时,只能用Map将对象存入ImpliciteModel中。
ImpliciteModel中的对象,可以认同为Request域中对象。
二、 POJO入参过程
1,检查implicite中是否存在相同key(默认为pojo类名小写,可以用@modelattribute指定)的值,有则传入,并用请求的参数值替换对应的值。
2,若implicite中没有,则检查sessionattribute中是否相同key的值,有则同一,没有则抛异常(可以通过配置,避免异常)。
3,若1、2中都没有,则通过反射创建对象,并用请求的参数值替换对应的值。最后再把对象存入implicite中。
@ModelAttribute 注解及 POJO入参过程的更多相关文章
- @ModelAttribute注解和POJO传参过程
1.@ModelAttribute注解 @ModelAttribute主要有三个用途,对方法进行注解,对参数进行注解,还有@ModelAttribute和@RequestMapping一起对方法进行注 ...
- Spring MVC POJO入参过程分析
SpringMVC确定目标方法POJO类型的入参过程 1.确认一个key: (1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写 ...
- SpringMVC POJO入参过程分析
SpringMVC确定目标方法POJO类型的入参过程 1.确认一个key: (1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写 ...
- springMVC中 request请求数据绑定到Controller入参 过程剖析
前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...
- 7、SpringMVC源码分析(2):分析HandlerAdapter.handle方法,了解handler方法的调用细节以及@ModelAttribute注解
从上一篇 SpringMVC源码分析(1) 中我们了解到在DispatcherServlet.doDispatch方法中会通过 mv = ha.handle(processedRequest, res ...
- ModelAttribute注解
1.使用@ModelAttribute标记方法,会在每个目标方法执行前被springMVC调用 2.使用@ModelAttribute修饰目标方法pojo入参,其value属性值有以下作用: 1)sp ...
- Spring MVC @ModelAttribute注解
在一个Controller内,被@ModelAttribute标注的方法会在此controller的每个handler方法执行前被执行. 被@ModelAttribute标注的方法的参数绑定规则和普通 ...
- Spring AOP 自定义注解获取http接口及WebService接口入参和出参
注解方法实现过程中可以采用如下获取方式:—以下为例 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHo ...
- SpringMVC @ModelAttribute注解
/** * 1. 有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用! * 2. @ModelAttribute 注解也可以来修饰 ...
随机推荐
- 查看regulator的信息
例如,查看ldo6 /sys/devices/soc.0/qcom,rpm-smd.35/rpm-regulator-ldoa6.85/regulator-l6.110/regulator/regul ...
- Business Unit Lookup in Form
Just add the below code in lookup() of StringEdit control in Form to get the Business Unit Lookup: p ...
- [python实现设计模式]-1. 单例模式
设计模式中,最简单的一个就是 “单例模式”, 那么首先,就实现一下单例模式. 那么根据个人的理解,很快就写出第一版. # -*- coding: utf-8 -*- class Singleton(o ...
- 一些常用的sql语句
1.查询表里的null值:is null 和 is not null select*from student where email is null 返回的该表里面邮箱为null的结果集 ...
- .net操作数据库,史上最牛逼的方法,你见过这种方法吗
免费分享给大家.下载地址在最下面. C# code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- 1、B2BUA
链接1:proxy和B2BUA的区别和联系:http://www.cnblogs.com/gnuhpc/archive/2012/12/11/2813499.html 链接2:http://blog. ...
- 批量Clip
没有建立对应dataset,直接生成featureclass,主要是工作中没几个dataset. # -*- coding: utf-8 -*-__author__ = 'tanshuai' impo ...
- STL之容器适配器priority_queue
priority_queue(优先队列)是一个拥有权值观念的queue,它允许加入新元素,删除旧元素,审视元素值等功能.由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素, 除此之外别 ...
- wordpress woodstock主题导入demo xml文件 execution time out
1.已设置php.ini max_execution_time = 240 导入显示设置60 2.wp-config.php 添加 set_time_limit(600); 无效 3. .htacce ...
- Linux:添加永久路由
没有以下文件时,可创建 vim /etc/sysconfig/network-scripts/route-eth0添加如下信息:192.168.142.100/32 via 192.168.142.1 ...