-
RESTful 風(fēng)格的重點(diǎn):
構(gòu)成: 資源 -- 表現(xiàn)層 -- 狀態(tài)轉(zhuǎn)化
查看全部 -
RESTful 風(fēng)格的GET、POST、PUT、DELET請(qǐng)求接口,常見(jiàn)以ID來(lái)標(biāo)識(shí)某個(gè)資源,并通過(guò)查找 ID 來(lái)達(dá)到獲取目標(biāo)資源或刪改某個(gè)數(shù)據(jù)的目的
查看全部 -
RESTful 狀態(tài)轉(zhuǎn)化 :
GET 、POST、PUT、DELETE 的特點(diǎn)查看全部 -
RESTful 表現(xiàn)層的內(nèi)容<br/>查看全部
-
SpringMVC? 數(shù)據(jù)綁定的擴(kuò)展性查看全部
-
springMVC查看全部
-
資源,表現(xiàn)層,狀態(tài)轉(zhuǎn)化
查看全部 -
同屬性多對(duì)象綁定
@InitBinder(“a”)
public void initA(WebDataBinder binder){
binder.setFieldDefaultPrefix("a.");
}
@InitBinder("b")
public void initB(WebDataBinder binder){
binder.setFieldDefaultPrefix("b.");
}
查看全部 -
本章主要介紹SpringMVC提供的PropertyEditor和自定義Formatter、Converter的使用場(chǎng)景、解決的實(shí)際的問(wèn)題以及Formatter和Converter的簡(jiǎn)單對(duì)比和選型依據(jù)
知識(shí)點(diǎn)1:
【a】PropertyEditor:屬性編輯器,一般用于類(lèi)型轉(zhuǎn)換,它是一個(gè)接口,有很多實(shí)現(xiàn)類(lèi),常用直接下級(jí)實(shí)現(xiàn)類(lèi)是PropertyEditorSupport,該類(lèi)常用方法有。
setValue(Object value):一般自定義類(lèi)型轉(zhuǎn)換器調(diào)用并傳入一個(gè)實(shí)體類(lèi)對(duì)象。
getValue():一般通過(guò)自定義類(lèi)型轉(zhuǎn)換器對(duì)象調(diào)用該方法就可以獲得實(shí)體類(lèi)對(duì)象。
setAsText(String text):通常傳入一個(gè)字符串,并對(duì)該字符串進(jìn)行解析,然后對(duì)實(shí)體類(lèi)屬性進(jìn)行賦值。
實(shí)現(xiàn)PropertyEdito接口時(shí),通常不直接實(shí)現(xiàn)接口PropertyEditor,而是繼承PropertyEditorSupport類(lèi)進(jìn)行擴(kuò)展。
案例:創(chuàng)建一個(gè)名為MyPropertyEditor的自定義類(lèi)型轉(zhuǎn)換器,并繼承PropertyEditorSupport,這樣就可以使用接口PropertyEditor提供的方法,實(shí)現(xiàn)setAsText(String text)方法,該方法里創(chuàng)建User對(duì)象,并對(duì)傳進(jìn)來(lái)的字符串用逗號(hào)分隔成字符串?dāng)?shù)組,把字符串?dāng)?shù)組第0個(gè)元素賦值給User對(duì)象的name,字符串?dāng)?shù)組的第1個(gè)元素賦值給User對(duì)象的age,再通過(guò)setValue(Object obj),把User對(duì)象傳入,這樣做的目的,就可以和前端約定,第一個(gè)字符在逗號(hào)前面的傳名字,第二個(gè)字符在逗號(hào)后面的傳年齡,這樣通過(guò)自定義的Editor就可以使用User對(duì)象進(jìn)行接收。
擴(kuò)展:getValue()方法源碼實(shí)現(xiàn)——它會(huì)返回一個(gè)Object對(duì)象,源碼中返回的是一個(gè)value屬性,而這個(gè)value就是PropertyEditorSupport的Object類(lèi)型的屬性
【b】Formatter:格式化器,它是一個(gè)接口Formatter<T>,它繼承Printer<T>和Parser<T>,他有很多實(shí)現(xiàn)類(lèi)(AbstractNumberFormatter、CurrencyFormatter貨幣轉(zhuǎn)換器、DateFormatter日期的轉(zhuǎn)換、InstanceFormatter、NumberFormatter、PercentFormatter百分比轉(zhuǎn)換器等),這里拿CurrencyFormatter講解(貨幣轉(zhuǎn)換器)(DateFormatter是做日期的格式化轉(zhuǎn)換器,PercentFormatter是做百分比的格式化轉(zhuǎn)換器)。
案例:創(chuàng)建自定義格式化類(lèi)型轉(zhuǎn)化器FormatterTest
test1()方法中,創(chuàng)建CurrencyFormatter對(duì)象,該對(duì)象調(diào)用setFractionDigits(2),該方法是用來(lái)保留小數(shù)點(diǎn)后幾位的,該對(duì)象再調(diào)用setRoundingMode(RoundingMode.CEILING),該方法是用作舍入操作,celling表示四舍五入,接著通過(guò)Assert類(lèi)的assertEquals()斷言方法,拿123.13和123.125進(jìn)行斷言。
案例2:將BigDecimal("123")格式化為字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,該接口有兩個(gè)泛型Converter<S,T>(其中<S>是source的類(lèi)型,<T>是target的類(lèi)型),它的實(shí)現(xiàn)類(lèi)很多,例如NumberToCharacterConverter,把數(shù)字轉(zhuǎn)換為字符,這里使用StringToBooleanConverter進(jìn)行講解,它實(shí)現(xiàn)了Converter<String,Boolean>接口,而且修飾的類(lèi)使用的是final修飾符而不是public,原因是防止該類(lèi)被修改、被繼承,Converter接口不讓實(shí)現(xiàn)類(lèi)進(jìn)行擴(kuò)展,而Formatter不一樣,它可以使用CurrentFormatter繼承Formatter接口的實(shí)現(xiàn)類(lèi)AbstractNumberFormatter,可以進(jìn)行擴(kuò)展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
總結(jié):內(nèi)置的CustomDateEditor(它繼承了PropertyEditorSupport),內(nèi)置的CurrencyFormatter(它繼承了AbstractNumberFormatter),內(nèi)置的StringToBooleanConverter(它實(shí)現(xiàn)了Converter<String,Boolean>),就擴(kuò)展性來(lái)說(shuō),這里所說(shuō)擴(kuò)展性都是Spring內(nèi)置擴(kuò)展性,Converter不可擴(kuò)展,PropertyEditor一般局部使用配合webdatabinder使用,F(xiàn)ormatter全局局部都可以,全局是通過(guò)Spring注入的方式,局部就像單元測(cè)試那樣,new一個(gè)Formatter,然后調(diào)用它的方法,Converter全局和局部都可以,全局也是通過(guò)Spring注入的方式,局部也是自己實(shí)現(xiàn)Converter接口,寫(xiě)一個(gè)實(shí)現(xiàn),然后new這個(gè)實(shí)現(xiàn)類(lèi)。
查看全部 -
SpringMVC——xml的數(shù)據(jù)綁定
案例:綁定xml數(shù)據(jù)類(lèi)型,也是通過(guò)RequestBody數(shù)據(jù)區(qū)獲取xml數(shù)據(jù)
步驟1:該功能需要如下依賴(lài),該包完成xml數(shù)據(jù)的序列化和反序列化功能。
步驟2:實(shí)體類(lèi)中使用到兩個(gè)注解,分別為@XmlRootElement(name="admin")給類(lèi)取別名和@XmlElement(name="name")用在屬性的get方法上,,如下圖
XML數(shù)據(jù):
輸出:
查看全部 -
本章主要介紹Json、Xml的數(shù)據(jù)綁定以及坑
知識(shí)點(diǎn)1:SpringMVC——Json數(shù)據(jù)綁定
案例:Controller中方法參數(shù)為User類(lèi)型對(duì)象,傳輸Json時(shí),Json數(shù)據(jù)被放到RequestBody里,所以需要在User前+@RequestBody注解(它會(huì)把RequestBody數(shù)據(jù)區(qū)的內(nèi)容反序列化為該參數(shù)的對(duì)象),這里使用DHC插件,該插件可以模擬各種請(qǐng)求,這里請(qǐng)求為POST,還需要把Content-Type,改成application/json如下圖
返回值:
JSON通過(guò)如下進(jìn)行支持:也就是將JSON數(shù)據(jù)綁定到實(shí)體中
查看全部 -
SpringMVC的RESTful實(shí)現(xiàn)方式
【1】起源:REST這個(gè)詞,是Roy Thomas Fielding在他2000年的博士論文中提出的,他同時(shí)是apache基金會(huì)的第一人主席,HTTP1.0和HTTP1.1版本的設(shè)計(jì)者之一
【2】名稱(chēng):Fielding將他對(duì)互聯(lián)網(wǎng)軟件的架構(gòu)原則,定名為REST,即Representational State Transfer(表現(xiàn)層、狀態(tài)、轉(zhuǎn)化)的縮寫(xiě),如果一個(gè)架構(gòu)符合REST原則,就稱(chēng)它為RESTful架構(gòu)(完整全稱(chēng):Resource Representational State Transfer)。
【3】資源-Resource:例如一個(gè)文本、圖片、服務(wù)、音頻、網(wǎng)絡(luò)上的一個(gè)具體信息,可以通過(guò)統(tǒng)一資源定位符uri指向它。
【4】表現(xiàn)層-Representational:資源是一種信息實(shí)體,可以有多種的外在表現(xiàn)形式,資源的外在表現(xiàn)形式稱(chēng)為Representational,即表現(xiàn)層,例如一個(gè)文本,它的表現(xiàn)形式可以有txt、html、xml、json、二進(jìn)制,圖片的表現(xiàn)形式可以有jpg、png,uri代表實(shí)體資源的位置,并不代表表現(xiàn)形式,具體的表現(xiàn)形式通過(guò)http協(xié)議的content-type和accept這兩個(gè)字段進(jìn)行描述。
案例:理解RESTful表現(xiàn)層——Representational
book是一個(gè)資源,通過(guò)http的content-type獲取不同的格式
【5】狀態(tài)轉(zhuǎn)化
【6】設(shè)計(jì)
查看全部 -
PropertyEditor的應(yīng)用
案例:Controller中有個(gè)方法,并且該方法的參數(shù)為Date類(lèi)型。如下圖,此時(shí)如果直接通過(guò)url傳入日期數(shù)據(jù),會(huì)報(bào)400錯(cuò)誤,說(shuō)明參數(shù)是有問(wèn)題的。
CustomDateEditor類(lèi):MVC編碼中,該Editor經(jīng)常被注冊(cè),通過(guò)使用binder.registerCustomEditor(這個(gè)binder就是之前admin和user
擁有同樣的name和age,方法里有個(gè)WebDataBinder類(lèi)型的binder)
registerCustomEditor():它是WebDataBinder對(duì)象的方法,該方法在它的父類(lèi)DataBinder中繼承來(lái)的,該方法中通過(guò)getPropertyEditorRegistry()獲得PropertyEditorRegistry對(duì)象,它就代表一個(gè)注冊(cè),PropertyEditorRegistry是一個(gè)接口,該接口有很多實(shí)現(xiàn)類(lèi),其中一個(gè)PropertyEditorRegistrySupport實(shí)現(xiàn)類(lèi),該類(lèi)有一個(gè)Map類(lèi)型的defaultEditors和customEditors,defaultEditors是這個(gè)類(lèi)創(chuàng)建的時(shí)候,SpringMVC自動(dòng)生成defaultEditors。customEditors需要人工手動(dòng)進(jìn)行注冊(cè),所謂注冊(cè)過(guò)程就是把Map進(jìn)行一個(gè)put的操作,這里可以通過(guò)createDefaultEditors()了解它defaultEditors是如何搜索的,首先對(duì)defaultEditors成員變量進(jìn)行聲明,聲明成一個(gè)HashMap長(zhǎng)度為64,然后會(huì)放入很多defaultEditors
對(duì)于customEditors:下面圖片中的上面的registerCustomEditor方法是下面registerCustomEditor方法的重載,中間差了一個(gè)參數(shù),該參數(shù)就是String propertyPath參數(shù),如果上面的方法傳入了一個(gè)null,就會(huì)調(diào)用下面的方法。
對(duì)于Date數(shù)據(jù)類(lèi)型綁定:
通過(guò)@InitBinder("date1")注解,并且在initDate1方法中WebDataBinder對(duì)象調(diào)用registerCustomEditor(),把這個(gè)東西進(jìn)行注冊(cè),因?yàn)槟J(rèn)注冊(cè)是沒(méi)有Date類(lèi)型的,但是PropertyEditorSupport進(jìn)行了擴(kuò)展,支持很多子類(lèi),并把Date類(lèi)型,轉(zhuǎn)換成CustomDateEditor類(lèi)型,通過(guò)CustomDateEditor的構(gòu)造器了解,一個(gè)參數(shù)是DateFormat一個(gè)參數(shù)是allowEmpty類(lèi)型,這里new一個(gè)SimpleDateFormat
查看全部 -
本章主要介紹SpringMVC提供的PropertyEditor和自定義Formatter、Converter的使用場(chǎng)景、解決的實(shí)際的問(wèn)題以及Formatter和Converter的簡(jiǎn)單對(duì)比和選型依據(jù)
知識(shí)點(diǎn)1:自定義類(lèi)型轉(zhuǎn)換器
【a】PropertyEditor:屬性編輯器,一般用于類(lèi)型轉(zhuǎn)換,它是一個(gè)接口,有很多實(shí)現(xiàn)類(lèi),常用實(shí)現(xiàn)類(lèi)是PropertyEditorSupport,該類(lèi)常用方法有,setValue(Object value)、getValue(){返回的是Object類(lèi)型的對(duì)象,這里返回的是通過(guò)setValue傳入的對(duì)象}、setAsText(String text),實(shí)現(xiàn)自定義PropertyEditor,通常不直接實(shí)現(xiàn)接口PropertyEditor,而是繼承PropertyEditorSupport進(jìn)行擴(kuò)展。
案例:創(chuàng)建一個(gè)名為MyPropertyEditor的自定義轉(zhuǎn)換器,并繼承PropertyEditorSupport,實(shí)現(xiàn)setAsText(String text)方法,該方法里創(chuàng)建User對(duì)象,并對(duì)傳進(jìn)來(lái)的字符串用逗號(hào)分隔成字符串?dāng)?shù)組,把字符串?dāng)?shù)組第一個(gè)元素賦值給User對(duì)象的name,字符串?dāng)?shù)組的第二個(gè)元素賦值給User對(duì)象的age,再通過(guò)setValue(Object obj),把User對(duì)象傳入,這樣做的目的,前端就可以通過(guò)逗號(hào)前傳name逗號(hào)后傳age傳參數(shù)了。
【b】Formatter:Formatter<T>格式化器,它是一個(gè)接口,繼承Printer<T>和Parser<T>,他有很多實(shí)現(xiàn)類(lèi),這里拿CurrencyFormatter講解(貨幣轉(zhuǎn)換器)(DateFormatter是做日期的格式化轉(zhuǎn)換器,PercentFormatter是做百分比的格式化轉(zhuǎn)換器)。
案例:創(chuàng)建自定義格式化類(lèi)型轉(zhuǎn)化器FormatterTest
test1()方法中,創(chuàng)建CurrencyFormatter對(duì)象,該對(duì)象調(diào)用setFractionDigits(2),該方法是用來(lái)保留小數(shù)點(diǎn)后幾位的,該對(duì)象再調(diào)用setRoundingMode(RoundingMode.CEILING),該方法是用作舍入操作,celling表示四舍五入,接著通過(guò)Assert類(lèi)的assertEquals()斷言方法,拿123.13和123.125進(jìn)行斷言。
案例2:將BigDecimal("123")格式化為字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,該接口有兩個(gè)泛型Converter<S,T>(其中<S>是source的類(lèi)型,<T>是target的類(lèi)型),它的實(shí)現(xiàn)類(lèi)很多,例如NumberToCharacterConverter,把數(shù)字轉(zhuǎn)換為字符,這里使用StringToBooleanConverter進(jìn)行講解,它實(shí)現(xiàn)了Converter<String,Boolean>接口,而且修飾的類(lèi)使用的是final修飾符而不是public,原因是防止該類(lèi)被修改、被繼承,Converter接口不讓實(shí)現(xiàn)類(lèi)進(jìn)行擴(kuò)展,而Formatter不一樣,它可以使用CurrentFormatter繼承Formatter接口的實(shí)現(xiàn)類(lèi)AbstractNumberFormatter,可以進(jìn)行擴(kuò)展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
總結(jié):內(nèi)置的CustomDateEditor(它繼承了PropertyEditorSupport),內(nèi)置的CurrencyFormatter(它繼承了AbstractNumberFormatter),內(nèi)置的StringToBooleanConverter(它實(shí)現(xiàn)了Converter<String,Boolean>),就擴(kuò)展性來(lái)說(shuō),這里所說(shuō)擴(kuò)展性都是Spring內(nèi)置擴(kuò)展性,Converter不可擴(kuò)展,PropertyEditor一般局部使用配合webdatabinder使用,F(xiàn)ormatter全局局部都可以,全局是通過(guò)Spring注入的方式,局部就像單元測(cè)試那樣,new一個(gè)Formatter,然后調(diào)用它的方法,Converter全局和局部都可以,全局也是通過(guò)Spring注入的方式,局部也是自己實(shí)現(xiàn)Converter接口,寫(xiě)一個(gè)實(shí)現(xiàn),然后new這個(gè)實(shí)現(xiàn)類(lèi)。
查看全部 -
本章主要介紹Json、Xml的數(shù)據(jù)綁定以及坑
知識(shí)點(diǎn)1:SpringMVC——Json數(shù)據(jù)綁定
案例:Controller中方法參數(shù)為User類(lèi)型對(duì)象,傳輸Json時(shí),Json數(shù)據(jù)被放到RequestBody里,所以需要在User前+@RequestBody注解(它會(huì)把RequestBody數(shù)據(jù)區(qū)的內(nèi)容反序列化為該參數(shù)的對(duì)象),這里使用DHC插件,該插件可以模擬各種請(qǐng)求,這里請(qǐng)求為POST,還需要把Content-Type,改成application/json如下圖
返回值:
JSON通過(guò)如下進(jìn)行支持
查看全部
舉報(bào)