码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC确定目标方法POJO类型入参的过程

时间:2017-06-10 21:29:11      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:获取   key   org   执行   提前   model   抛出异常   attribute   pre   

SpringMVC确定目标方法POJO类型入参的过程
访问方法
    @RequestMapping("/pojoparam")
    public String POJOParam(User user){
        
        return "success";
    }
1,首先确定一个key值
①如果目标方法的POJO类型的参数没有使用@ModelAttribute作为入参修饰,则key为POJO类名的第一个字母小写
    例test(User user){}这样的方法key就是user
②如果使用了@ModelAttribute来修饰入参,则key为@ModelAttribute注解的value属性值
    例test(@ModelAttribute(value="users") User user){} 这样的方法key就是users
2,在Model中查找key对应的对象,若果存在,则作为入参传入
    如果在@ModelAttribute标记的方法在Map中保存过这个key的对象,则会获取到
3,若果不存在,则检查这个类是否被@SessionAttributes注解修饰,如果使用该注解,这个注解中value包含了key,
  则会从HttpSession中获取key对应的对象,如果存在,则直接传入目标方法的入参中,若不存在,则抛出异常
4,如果这个类没有被@SessionAttributes注解,或者注解的value中不包含key,则会通过反射创建POJO类型的参数,传入为目标方法的参数
5,SpringMVC会把key和POJO类型的对象保存到Model中,进入保存到request中

 

 抛出异常的情况:(导包部分省略)

/**
 * Model中查询不到user,而且存在@SessionAttributes(value="user"),存在value=user,但是session域中不存在user对象,会抛出异常
 */
@SessionAttributes(value="user")
@Controller
public class ModelAndViewAction {

	@RequestMapping("/pojoparam")
	public String POJOParam(User user){
		
		return "success";
	}
}

 抛出的异常:

org.springframework.web.HttpSessionRequiredException: Session attribute ‘user‘ required - not found in session

 利用@ModelAttribute()注解标记方法,将User对象提前放入Model当中

@SessionAttributes(value="user")
@Controller
public class ModelAndViewAction {
	@ModelAttribute("user")
	public User getUser(){
		Family family=new Family();
		family.setCity("上海");
		User user=new User(1, "张三啊", 12,family);
		return user;
	}
	@RequestMapping("/pojoparam")
	public String POJOParam(User user){
		
		return "success";
	}
}

 这样则不会有异常,session域和request域中都存在User对象,key为“user”

@ModelAttribute()注解的方法会在每个目标方法执行前被SpringMVC调用

 

SpringMVC确定目标方法POJO类型入参的过程

标签:获取   key   org   执行   提前   model   抛出异常   attribute   pre   

原文地址:http://www.cnblogs.com/lzzhuany/p/6979859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!