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

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调用

 

转载于:https://www.cnblogs.com/lzzhuany/p/6979859.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值