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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM