springMVC的數據綁定

springMVC的數據綁定java

1. 基本類型
    1.1 好比int和Integer如何去選擇做爲Controller方法的入參
    1.2 在入參上加上註解@RequestParam,
    1.3 @RequestParam註解幾個設置
         1.3.1 value如何應用,value就是參數的別名, 並且http參數只能以別名傳參
         1.3.2 required爲true,表示這個參數是必須傳值的,
         1.3.3 defaltValue的設置,是否設置默認值spring

2. 數組做爲Controller方法傳參
    1.1 例子傳參 : http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jimjson

3. Object做爲Controller方法傳參
    1.1 普通url例子傳參: http://localhost:8080/object.do?name=Tom&age=10
    1.2 若是Object的屬性也是一個對象的傳參
            http://localhost:8080/object.do?name=Tom&age=10&contactInfo.phone=10086
    1.3 若是Controller的入參有2個Object,而且這兩個Object有同名稱的屬性,爲了區分不一樣的Object的屬性
         1.3.1 url能夠是: http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10
         1.3.2 須要用到註解InitBinder,並寫一個方法表示在Controller方法執行前執行數組

@InitBinder("user")   //註解的value值對應執行方法的入參名稱
public void initUser(WebDataBinder binder){  //方法的傳參是WebDataBinder
      binder.serFieldDefaultPerfix("user.");            //設置默認的前綴
}
@InitBinder("admin")//註解的value值對應執行方法的入參名稱
public void initAdmin(WebDataBinder binder){
      binder.serFieldDefaultPerfix("admin.");
}


        1.3.3 則Controller方法以下服務器

@RequestMapping(value="object.do")
@ResponseBody
public String object(User user, Admin admin){
     return user.toString() + ", " + admin.toString();
}

4. 集合的綁定
    4.1 List的綁定
        4.1.1  List必須做爲某個javaben的屬性,好比mvc

public class UsersForm{
     private List<User> users;
     //getter, setter, toString function...
}


        4.1.2 而後Controller方法就能夠接收這個包含List集合做爲屬性的javabean爲入參了app

@RequestMapping(value="list.do")
@ResponseBody
public String list(UsersForm usersForm){
    return "users.size :" + usersForm.users.size() + ",  all users :" 
             + usersForm.users.toString();
}


        4.1.3 那麼url傳參能夠是這個樣子的
                http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy&users[20].name=Jerry
        4.1.4  注意
                在url傳參的時候,下標索引不要中間出現中斷的數字,好比不要出現如上的從0,1直接到20的狀況,雖然不會報錯,可是建立中的2到19的元素的javabean
   4.2 Set集合的綁定
        4.2.1 Set一樣須要做爲某個javabean的屬性,和List不一樣的是,必須在javabean的構造方法裏爲Set屬性初始化
        4.2.2 Controller方法的處理同List綁定的Controller方法
        4.2.3 url傳參時, 
            4.2.3.1參數的下標不能中斷, 
            4.2.3.2 在Set集合中的元素在複寫hashCode方法以後,url傳參的元素傳給Set以後的元素不能hashCode斷定相同,不然拋異常ui

    4.3 Map集合的綁定
        4.3.1   Map也和List同樣,必須做爲某個JavaBean 的屬性
        4.3.2   Controller方法同List綁定的Controller方法
        4.3.3 傳參例子以下:  中括號中的是key,等號後的爲value
                http://localhost:8080/map.do?users['x'].name=Tom&users['y'].name=Lucy     url

5. json和xml數據綁定 
    5.1 對http頭必須設置content-type
            json設置的content-type="application/json"
            xml設置的content-type="application/xml" 
    5.2 經過Post傳參, json的數據綁定須要用到RequestBody註解,這個註解用於讀取body部分的數據code

@RequestMapping(value={"json.do","xml.do"})
@ResposeBody
public String json(@RequestBody User user){
    return user.toString();
}


6. 數據轉換,格式化
    6.1 PropertyEditor接口, 默認實現類PropertyEditorSupport,主要方法setValue, getValue, setAsText
        6.1.1 將一段字符串解析成一個javabean,或者將一個javabean轉換成一個字符串
        6.1.2 有不少默認的數據轉換實現, 好比對Date的實現

           

@RequestMapping(value="date1.do")
@ResponseBody
public String date1(Date date1){
    return date1.toString();
}
//對如上的Controller處理方法,須要對入參的Date進行數據轉換設置
@InitBinder("date1")
public void initDate1(WebDateBinder binder){
     binder.registerCustomEditor(                                //註冊一個針對傳參名稱爲date1的一個轉換器
         Date.class,                                                         //轉換的目標類型
         new CustomDateEditor(                                   //一個springmvc默認提供的Date轉換器
             new SimpleDateFormatter("yyyy-MM-dd"),    //字符串格式
             true)                                                                 //true表示轉換器能夠處理null,空字符串等
     );
}

      6.2 全局的轉化器
        6.2.1 Formatter
            新建一個類實現Formatter接口

public class MyDateFormatter implements Formatter<Date> {
    public Date parse(String text, Locale locale) throws ParseException{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.parse(test);
    }
    public String print(Date obj, Locale locale){
        return null;
    }
}

        6.2.2 Converter

public class MyDateConverter implements Converter<String, Date>{
      public Date convert(String source){
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           try{
              return sdf.parse(source);
            }catch(ParseException ex){ex.printStackTrace;};
       }
       return null;
}

  7 RESTful
      7.1 相似於這樣的url
            http://movie.douban.com/show/subject/11345/
       7.2  對應的Controller的處理方法
                須要用到註解 @PathVariable

@RequestMapping(value="/subject/{subjectId}")       
@ResponseBody
public String subject(@PathVariable("subjectJd") String subjectId){
     return subjectId;
}


      7.3 全稱:  Representational State Transfer (資源)表現層狀態轉換
                7.3.1 資源,好比url只表示資源實體,並不表明資源的展示形式
                7.3.2 資源的展示形式,經過http頭的content-type/accept來在客戶端和服務器之間控制
                7.3.3 RESTful的狀態轉換
                    概念: 冪等性: 相同的URL,相同的參數的http請求,返回的響應相同

                    GET    :獲取資源 , 具備冪等性                     POST :建立資源 , 不具備冪等性                     PUT    :建立或者更新資源, 具備冪等性                     DELETE :刪除資源, 具備冪等性

相關文章
相關標籤/搜索