-
SpringMVC——Map的數(shù)據(jù)綁定
案例:同樣需要一個類UserMapForm,聲明一個私有的Map<String,User> users,并提供set/get方法和toString方法,Controller中,如下圖二。
參數(shù)的傳遞方式:查看全部 -
SpringMVC——Set的數(shù)據(jù)綁定
案例:Set應(yīng)用場景,抽象一個Student對象,有一個name屬性和一個Email屬性,提交信息時候,需要把學(xué)生1和學(xué)生2的name和Email同時綁定到后臺,Set和List還是有一些區(qū)別的,它需要先初始化Set(也就是Set集合的長度要大于0,這里在提供集合的類里對Set初始化,添加若干元素),而List是不需要的,而且Set數(shù)據(jù)綁定在實際應(yīng)用中,經(jīng)常用作對象的重復(fù)判斷,或者排除重復(fù),例如:Student對象有一個name和Email,如果name和Email都相等時,那么這個對象是重復(fù)的,會重寫hashcode方法和equals方法,然后在里面寫重復(fù)判斷的邏輯,SpringMVC對于Set集合的綁定,如果學(xué)生1和學(xué)生2傳來的name和Email是一樣的就會綁定到一個對象上。
訪問地址:
SpringMVC對Set類型數(shù)據(jù)綁定支持不夠好
如果實體類Student重寫了equals和hashcode方法,那么再次綁定就會綁定一個對象,也就是集合中只有一個對象,如圖一,當(dāng)我我們在url中通過http://localhost:8080/setParam?set[0].name=Tom&set[1].name=Tom傳參數(shù)時,會報錯,對于集合綁定優(yōu)先使用List進行綁定。
查看全部 -
本章主要介紹List、Set、Map結(jié)構(gòu)的數(shù)據(jù)綁定以及坑
知識點1:List的數(shù)據(jù)綁定
案例:后臺抽象一個Student對象,有一個name屬性和一個Email屬性,提交信息時候,需要把學(xué)生1和學(xué)生2的name和Email同時綁定到后臺,List就應(yīng)用到這種場景,SpringMVC對于集合綁定,需要專門創(chuàng)建一個類提供一個集合,并且集合的泛型為User,如圖二,也就是Controller的方法里使用提供集合的類作為參數(shù),如圖3,這里訪問的是下一級,也就是使用提供集合類的屬性users傳入?yún)?shù),list.do?users[0].name=Tom&users[1].name=Lucy,如果url中下標直接寫20,則這個數(shù)組的長度為21,也就是數(shù)組中有很多空對象,請求的索引一定是連續(xù)的,否則浪費內(nèi)存資源,如最后一張圖。
查看全部 -
SpringMVC綁定數(shù)據(jù)——同屬性的多對象(兩個類具有相同的屬性)
@InitBinder注解:訪問Controller時,執(zhí)行相應(yīng)方法前,會首先執(zhí)行該注解下的方法進行一個初始化,然后再執(zhí)行相應(yīng)的方法。
案例:User類和Admin類具有相同的屬性name和age,如果直接在請求中傳入name=?&age=?,那么User類和Admin類的屬性都會被賦值為相同的值,如果想?yún)^(qū)分并賦值,如下圖。
查看全部 -
本章主要介紹簡單對象、復(fù)雜對象的數(shù)據(jù)綁定以及常遇到的問題
SpringMVC數(shù)據(jù)綁定——簡單對象、多層級對象、同屬性對象。
簡單對象:首先需要創(chuàng)建一個對象類,然后在Controller的方法里引用該對象。
多層級對象:方法參數(shù)里的對象里面有一個依賴其它類的屬性
查看全部 -
包裝類和數(shù)組的處理
SpringMVC綁定數(shù)據(jù)——包裝類:可以不傳key,可以不給方法參數(shù)傳值,但是如果使用@RequestParam修飾了就必須給數(shù)據(jù)傳值。
SpringMVC綁定數(shù)據(jù)——數(shù)組
查看全部 -
SpringMVC數(shù)據(jù)綁定——基本類型處理
@ResponseBody:方法的返回值,會放到Response的body的數(shù)據(jù)區(qū)里。
@RequestParam:有三個屬性value、required、defaultValue,value是給傳入的參數(shù)起別名,required是必須要傳入的參數(shù),默認為true,defaultValue代表如果不傳會賦予默認值。
查看全部 -
SpringMVC數(shù)據(jù)綁定——基本類型、包裝類型、數(shù)組類型綁定
例如:age屬性可以使用int和Integer進行修飾。
【a】使用基本類型int修飾age屬性:key是必須傳的(并且必須傳入value),并且age的value范圍和類型必須是int類型范圍,如果傳入的參數(shù)是字符串則會報400錯誤異常,如果沒有傳age,則會報500錯誤。
【b】使用包裝類型Integer修飾age屬性:可以不用傳入key,Integer類型的age可以為null,所以開發(fā)過程中對于可能為空的數(shù)據(jù)設(shè)置為包裝類型,當(dāng)然也需要@RequestParam注解對其進行配置。
使用數(shù)組進行數(shù)據(jù)綁定:一次可以傳多個,可以是基本類型、包裝類型、String的對象類型。
查看全部 -
Intellij IDEA簡介以及創(chuàng)建SpirngMVC項目
eclipse————intellij idea
workspace ? ? ? ? ? ? ? ? project
?project ? ? ? ? ? ? ? ? ? ? ?module
查看全部 -
SpringMVC數(shù)據(jù)綁定課程概述
【一】數(shù)據(jù)綁定概念:簡單綁定是將一個用戶界面元素(控件)的屬性綁定到一個類型(對象)實例上的某個屬性的方法。
【二】IDE——intellij idea簡介以及intellij idea創(chuàng)建springMVC項目。
【三】基本類型、包裝類型(例如:年齡是使用int還是Integer)、數(shù)組類型的數(shù)據(jù)綁定。
【四】簡單對象、多層級對象、同屬性多對象的數(shù)據(jù)綁定。
【五】List、Set、Map數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)綁定。
【六】Json和Xml數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)綁定(Json和Xml的數(shù)據(jù)傳輸在實際應(yīng)用經(jīng)常使用,因為某些對象數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜)。
【七】PropertyEditor、Formatter、Converter,創(chuàng)建局部類型轉(zhuǎn)換器和全局類型轉(zhuǎn)換器。
【八】RESTful擴展及應(yīng)用場景
【九】課程總結(jié)(總結(jié)重點知識點和碰到的問題以及避免的問題)
查看全部 -
自定義一個converter
/** ?*??A?converter?converts?a?source?object?of?type?{@code?String}?to?a?target?of?type?{@code?Date}. ?*/ public?class?MyConverter?implements?Converter<String,Date>{ ????@Override ????public?Date?convert(String?s)?{ ????????try?{ ????????????return?DateUtil.S_DAY_DATEFORMAT.parse(s); ????????}?catch?(ParseException?e)?{ ????????????e.printStackTrace(); ????????} ????????return?null; ????} }
配置自定義converter
@Configuration public?class?WebMvcConfig?extends?WebMvcConfigurerAdapter?{ //????@Bean //????public?Formatter<Date>?myDateFormatter(){ //????????return?new?MyDateFormatter(); //????} // //????@Override //????public?void?addFormatters(FormatterRegistry?registry)?{ //????????registry.addFormatter(myDateFormatter()); //????????super.addFormatters(registry); //????} ????@Bean ????public?Converter?myConverter(){ ????????return?new?MyConverter(); ????} }
使用
/** ?*date:2018-05-24 ?*?@param?date ?*/ @PostMapping("date") public?void?dateType(Date?date){ ????System.out.println(date); }
查看全部 -
定義一個日期格式化工具類
public?class?DateUtil?{ ????public?static?SimpleDateFormat?S_STANDARD_DATEFORMAT?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss"); ????public?static?SimpleDateFormat?S_DAY_DATEFORMAT?=?new?SimpleDateFormat("yyyy-MM-dd");
自定義Formatter
public?class?MyDateFormatter?implements?Formatter<Date>{ ????@Override ????public?Date?parse(String?text,?Locale?locale)?throws?ParseException?{ ????????return?DateUtil.S_DAY_DATEFORMAT.parse(text); ????} ????@Override ????public?String?print(Date?object,?Locale?locale)?{ ????????return?DateUtil.S_DAY_DATEFORMAT.format(object); ????} }
注冊自定義的formatter
@Configuration public?class?WebMvcConfig?extends?WebMvcConfigurerAdapter?{ ????@Bean ????public?Formatter<Date>?myDateFormatter(){ ????????return?new?MyDateFormatter(); ????} ????@Override ????public?void?addFormatters(FormatterRegistry?registry)?{ ????????registry.addFormatter(myDateFormatter()); ????????super.addFormatters(registry); ????} }
測試使用
????/** ?????*date:2018-05-24 ?????*?@param?date ?????*/ ????@PostMapping("date") ????public?void?dateType(Date?date){ ????????System.out.println(date); ????} ????/** ?????*date2:2018-05-24 ?????*?@param?date2 ?????*/ ????@PostMapping("date2") ????public?void?dateType2(Date?date2){ ????????System.out.println(date2); ????} //????/** //?????*?InitBinder注解的value為指定requestParam的name //?????*?此注解的作用范圍在自身所在controller內(nèi) //?????*?@param?binder //?????*/ //????@InitBinder({"date"}) //????public?void?initDate(WebDataBinder?binder){ //????????//指定處理類型,自定義數(shù)據(jù)處理器,處理器允許requestParam值為空 //????????binder.registerCustomEditor(Date.class,new?CustomDateEditor(DateUtil.S_DAY_DATEFORMAT,true)); //????}
查看全部 -
/** ?*date:2018-05-24 ?*?@param?date ?*/ @PostMapping("date") public?void?dateType(Date?date){ ????System.out.println(date); } /** ?*date:2018-05-24 ?*?@param?date2 ?*/ @PostMapping("date2") public?void?dateType2(@RequestParam("date")?Date?date2){ ????System.out.println(date2); } /** ?*?InitBinder注解的value為指定requestParam的name ?*?此注解的作用范圍在自身所在controller內(nèi) ?*?@param?binder ?*/ @InitBinder({"date"}) public?void?initDate(WebDataBinder?binder){ ????//指定處理類型,自定義日期數(shù)據(jù)處理器,處理器允許requestParam值為空 ????binder.registerCustomEditor(Date.class,new?CustomDateEditor(new?SimpleDateFormat("yyyy-MM-dd"),true)); }
查看全部 -
老師的方式,請求參數(shù)為item[n]:name=xx&item[m]:name=xxx,也可以傳遞json字符串
一、封裝list的類
import?lombok.Data; import?java.util.List; @Data public?class?FromAdminList?{ ????List<Admin>?admins; }
二、使用封裝了list的類接受
/** ?* ?[ ?{ ?"username":?"John", ?"password":?"Doe", ?"age":"11" ?}, ?{ ?"username":?"Anna", ?"password":?"Smith", ?"age":"11" ?}, ?{ ?"username":?"Peter", ?"password":?"Jones", ?"age":"11" ?} ?] ?*?@param?admins ?*/ @PostMapping("admins") public?void?listTypeObj(FromAdminList?admins){ ????System.out.println(admins); }
另一種方式,使用@RequestBody,請求參數(shù)為json字符串格式,前提是有json的轉(zhuǎn)換器
一、向list類型參數(shù)加上注解@RequestBody
/** ?[ ?{ ?"username":?"John", ?"password":?"Doe", ?"age":"11" ?}, ?{ ?"username":?"Anna", ?"password":?"Smith", ?"age":"11" ?}, ?{ ?"username":?"Peter", ?"password":?"Jones", ?"age":"11" ?} ?] ?*?@param?admins ?*/ @PostMapping("adminlist") public?void?listTypeObj(@RequestBody?List<Admin>?admins){ ????System.out.println(admins); }
對于基本類型,string都有效
/** ?* ?[ ?"adb", ?"xixi", ?"多久啊送到家" ?] ?*?@param?info ?*/ @PostMapping("strs") public?void?listTypeStr(@RequestBody?List<String>?info){ ????System.out.println(info); } /** ?[ ?1, ?2, ?3 ?] ?*?@param?info ?*/ @PostMapping("Ints") public?void?listTypeBase(@RequestBody?List<Integer>?info){ }
查看全部 -
包裝類可以為空
查看全部
舉報