-
1、PropertyEditor:在類(lèi)中進(jìn)行局部使用
2、Formatter:全局,或者使用new Formatter的方式進(jìn)行局部使用,只能轉(zhuǎn)換String到其他類(lèi)型;
3、Converter:全局或局部,和Formatter類(lèi)似,但Converter的源對(duì)象不僅僅是String,而可以自行進(jìn)行定義
查看全部 -
1、同F(xiàn)ormatter類(lèi)似,Converter自定義時(shí)實(shí)現(xiàn)Converter接口,指定泛型<S, T>,即源對(duì)象和目標(biāo)對(duì)象,然后實(shí)現(xiàn)convert方法;
2、同樣在xml中進(jìn)行配置,將自定義轉(zhuǎn)換器注入FormattingConversionServiceFactoryBean,再將該bean作為mvc的conversion-service
3、不同在于,F(xiàn)ormatter只能將String作為源對(duì)象,而Converter則可以自行定義
查看全部 -
1、自定義Formatter需要實(shí)現(xiàn)Formatter接口,并指定泛型(轉(zhuǎn)換后的類(lèi)型,該視頻例中即為Date),實(shí)現(xiàn)其parse方法
2、配置bean,將自定義Formatter注入到Spring的FormattingConversionServiceFactoryBean類(lèi)中,采用xml配置方式,同時(shí)將該bean作為mvc的conversion-service(如截圖)
3、注意,這種規(guī)范器是全局的,F(xiàn)ormatter適用于轉(zhuǎn)換String為其他類(lèi)型,所以一般用在web層,將請(qǐng)求體中的內(nèi)容進(jìn)行轉(zhuǎn)換
查看全部 -
之前幾個(gè)章節(jié)我們提到了在處理同級(jí)對(duì)象的同名屬性時(shí),使用注解 @InitBinder 來(lái)設(shè)置不同的前綴以作區(qū)別,這里我們同樣用到了這個(gè)注解,這次來(lái)大概梳理一下。
先看下 @InitBinder 注解的大概說(shuō)明:用來(lái)標(biāo)記某些方法,初始化WebDataBinder來(lái)處理參數(shù)。那么我們可以繼續(xù)看下 WebDataBinder,說(shuō)明是“為了處理數(shù)據(jù)綁定,用來(lái)將請(qǐng)求中的參數(shù)轉(zhuǎn)化為JavaBean對(duì)象”,所以我們也就用到了該對(duì)象的一個(gè)方法registerCustomEditor,而該方法的一個(gè)重要的參數(shù)類(lèi)型就是?PropertyEditor,這個(gè)接口說(shuō)明的作用是“提供各種方式展示屬性值”
這里涉及到的兩個(gè)接口?PropertyEditor 和?PropertyEditorRegistry,顯然后者是前者的注冊(cè)器。在注冊(cè)器的實(shí)現(xiàn)類(lèi)?PropertyEditorRegistrySupport 中我們可以看到其屬性就有?defaultEditors 和?customEditors,從命名就可以看出,如果我們使用自定義規(guī)則,就需要將自定義的PropertyEditor,通過(guò) registerCustomEditor() 將其注冊(cè)到?customEditors 中才能使用。那么有兩種方式,第一種是我們自定義類(lèi)繼承PropertyEditorSupport間接實(shí)現(xiàn)PropertyEditor接口,這在上個(gè)章節(jié)視頻《7-1 介紹》的1:17前后進(jìn)行了說(shuō)明;第二種方式就是實(shí)際上spring提供了一些簡(jiǎn)單的實(shí)現(xiàn)類(lèi),比如日期的編輯器類(lèi)CustomDateEditor,也就是我們?nèi)缃貓D所示意用到的。
查看全部 -
小結(jié):
1、每個(gè)uri代表一種資源
2、客戶(hù)端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)層
3、客戶(hù)端通過(guò)http動(dòng)詞,對(duì)服務(wù)器端資源進(jìn)行操作,實(shí)現(xiàn)“表現(xiàn)層狀態(tài)轉(zhuǎn)化”
查看全部 -
GET:獲取資源
POST:創(chuàng)建新資源
PUT:創(chuàng)建或更新資源
DELETE:刪除資源
查看全部 -
uri代表資源,所以要避免動(dòng)詞,如截圖中的show就不應(yīng)該出現(xiàn)
查看全部 -
把uri當(dāng)成一種資源,而資源作為信息實(shí)體,可以有多種外在表現(xiàn)形式,如一個(gè)文本可以對(duì)外表現(xiàn)為html、json、二進(jìn)制等,如何通過(guò)uri獲取這個(gè)資源的表現(xiàn),則是依靠htpp協(xié)議的content-type和accept
查看全部 -
同樣對(duì)于xml類(lèi)型的數(shù)據(jù)綁定,和json類(lèi)似,在方法形參上增加注解 @RequestBody,并且在Post請(qǐng)求時(shí)請(qǐng)求頭為Content-Type: application/xml。這樣SpringMVC就會(huì)調(diào)用對(duì)應(yīng)的解析器去解析,所以我們同時(shí)還需要在pom中添加xml解析的相關(guān)依賴(lài)?spring-oxm ,同時(shí)如截圖所示,將xml對(duì)應(yīng)的實(shí)體類(lèi)進(jìn)行注解標(biāo)注,根節(jié)點(diǎn)放在類(lèi)名,并使用name屬性設(shè)定對(duì)應(yīng)的xml中的根節(jié)點(diǎn)名稱(chēng),其他節(jié)點(diǎn)同理。
查看全部 -
SpringMVC接受http中body的json格式內(nèi)容為參數(shù),在方法的形參前加上注解 @RequestBody,用以調(diào)用解析器進(jìn)行轉(zhuǎn)換,值得注意的是:
1、需要額外添加jackson的依賴(lài)
2、需要在dispatcher-servelt.xml中<mvc:annotation-driven />,相當(dāng)于默認(rèn)配置了部分HandlerMapping和HandlerAdapter,如此處需要的RequestMappingHandlerAdapter(參考:https://blog.csdn.net/qq_18675693/article/details/52214056)
3、post請(qǐng)求時(shí),請(qǐng)求頭信息務(wù)必添加 Content-Type: application/json
查看全部 -
map的方式和list類(lèi)似,不同的在于索引不是數(shù)字,而是key
查看全部 -
在SpringMVC中綁定Set數(shù)據(jù)類(lèi)型,接口的參數(shù)形式和綁定list是類(lèi)似的,都是通過(guò)索引。但是不同的在于,Set必須初始化,如圖必須先包含了初始化對(duì)象,也即是說(shuō)必須提前手動(dòng)分配好空間,才能進(jìn)行賦值,而使用List則沒(méi)有這個(gè)要求。
另外的一個(gè)坑在于,初始化Set時(shí)需要留意對(duì)象的equals方法,假如我們?cè)谔崆胺峙鋬蓚€(gè)對(duì)象空間時(shí),兩個(gè)對(duì)象通過(guò)equals方法判斷為相同,則我們期望的Set的size為2,最后實(shí)際因?yàn)槿ブ刈兂闪?,導(dǎo)致在數(shù)據(jù)綁定時(shí)很容易出現(xiàn)數(shù)組越界的異常。
查看全部 -
List類(lèi)型的傳參,使用某個(gè)類(lèi)進(jìn)行封裝,以xxx.xxList[x]類(lèi)似方式進(jìn)行數(shù)據(jù)綁定,注意索引按順序分別填寫(xiě)參數(shù),否則容易創(chuàng)建空值的對(duì)象到List中。
查看全部 -
對(duì)于兩個(gè)不同的類(lèi),遇到同名屬性的情況,SpringMVC會(huì)默認(rèn)針對(duì)所有類(lèi)的同名屬性賦值,如截圖中的age。如果想要區(qū)別對(duì)待,直接使用xxx.xxx的形式是不行的,還需要在對(duì)應(yīng)的Controller中定義方法,以 @InitBinder 注解標(biāo)記屬性名,形參使用?WebDataBinder 來(lái)定義請(qǐng)求參數(shù)前綴,如截圖。
查看全部 -
對(duì)象類(lèi)型的數(shù)據(jù)綁定,直接請(qǐng)求時(shí)對(duì)應(yīng)其屬性即可,不必添加前綴,如截圖中User類(lèi)的屬性name,則直接在請(qǐng)求中使用name=xxx,而不是使用user.name=xxx的形式。但如果是想對(duì)對(duì)象中對(duì)象的屬性再賦值的話,則需要使用xxx.xxx的形式,如下的contactInfo.phone表示將User類(lèi)中的ContactInfo類(lèi)的phone屬性賦值。
查看全部
舉報(bào)