springMVC數據綁定入門


數據綁定是將用戶輸入綁定到領域模型的一種特性。

@controller 注解使類生效
@RequestMapping(value="",meithod = RequestMethod.GET) 指定請求和方法
@RequestParam(value="",required = true)value參數別名 required 是否必傳默認為true
@RequestParam("age")括號里面是age,客戶端傳上來的也要是age,名稱要一致

請求的參數是數組的處理(參數直接設置為數組形式)
@RequestMapping(“array.do”)
@ResponseBody
public String array(String[] name){
StringBuilder sb=new StringBuilder();
for(String item:name){
 sb.append(item).append("");
}
return sb.toString();
}

1、簡單對象:請求方式直接寫“對象的屬性=XXX”即可,不用加“對象名.”的前綴;
2、多層級對象:第二級以上對象必須加“對象名.”的前綴。
如:user類里有一個屬性是聯系方式這個對象,那么前端傳參的時候就要聯系方式.聯系地址(屬性【對象】.屬性)


同屬性的多對象參數綁定:

前端請求的時候要寫成user.name=Tom&admin.name=lucy&age=10
就是區分開哪個對象的哪個屬性叫什么
  

 

 

關於List的數據綁定:
 springMVC 不支持list類型的直接轉換,需包裝成object。
public String list(List<User> uList)這種寫法是不對的
需要自己寫一個類,這個類里面的某個屬性是一個List集合
如:
public class UserListForm(
   private List<User> uList;
)

然后Controller里:
public String  list(UserListForm userListForm)

Set我們一般用來排重
使用Set的時候需要先進行初始化
要使用Set的排重功能必須在對象中覆寫hashcode和equals方法。
SpringMVC對Set支持並不太好,初始化進行排重時會導致size變小,致使無法接受更多的數據而拋出異常,所以我們開發一般優先使用List。

Map傳參方式:users['X'].name=Tom&users['X'].age=10&users['Y'].name=Lucy。

實際工作中那個前端跟我說,你這個傳參太麻煩了,我不會傳。然后我就只能報告項目經理去了。。。。。。。。。。。。

 

1.在參數中加注解@RequestBody( @RequestBody User user)。@RequestBody是把傳過來的Json數據反序列化綁定到控制器參數上

xml 數據綁定:必須在實體類里面加注解@XmlRootElement,在屬性上添加XmlElement 
ex:@XmlElement(name="age"):此時就會將xml 里面對應的age數據添加到實體類中的age屬性中去。
2、xml數據綁定需要“spring-oxm”這個jar包提供支持

 

使用PropertyEditor實現綁定時的類型轉換:(數據類型轉換器)
請求參數string到參數類型(也可能是任意類型)的類型轉換,都是使用PropertyEditor類實現的string到任意參數的轉換的。但是PropertyEditor不能實現任意對象到任意對象之間的轉換,比如我們常見的Long時間戳到Date類型的轉換時辦不到的。

在請求的Url中設置日期類型的字符串傳遞的時候,報400錯,說明日期綁定失敗,如何使得Url中的日期與controller方法中入參類型為Date的對象綁定呢?這時,我們就需要注冊自定義屬性編輯器。如圖,@InitBinder("date1")限定參數為date1,通過Url請求時,先執行有此注解的方法,該方法,向數據綁定器注冊了新的自定義的屬性編輯器,將Date類型的value設置為SimpleDateFormat("yyyy-MM-dd"),假如Url傳遞的參數為date1=2020-02-20,那么就會將Date參數直接格式化為yyyy-MM-dd格式,並作為controller方法的參數。完成綁定,可見,通過注解實現自定義參數綁定只需要注意兩點:①使用注解,綁定傳遞的參數,形如@InitBinder("date1"),綁定的參數為date1,②基於此注解的方法,必須有一個參數,且參數類型為WebDataBinder,通過調用該對象的registerCustomEdior(_,_)實現自定義屬性轉換的注冊。

@InitBinder("datel")
public void initDatel(WebDataBinder binder){
   binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true))
}
true的意思是允許為空。。。

 

全局的自定義類型轉換器需要在springmvc.xml中進行配置:
①添加一個bean類(FormattingConversionServiceFactory)並指明id="自定義",並在這個類中將自己寫好的自定義類型轉換器的類進行屬性注入的配置,同時
②<mvc:annotation-driven conversion-service="自定義"></mvc:annotation>
如上兩步,以及自定義類型轉換器,將實現Url傳入參數的自定義轉換。
    

 

 

自己寫的Converter類

 

 
         
 還要再xml里進行配置

 

 
RESTful表現層狀態轉化

 

RESTful在控制層的具體應用:

 

RESTful總結:

 

 
          
 
          
 
         
 
 









免責聲明!

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



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