-
RESTful設(shè)計(jì)
查看全部 -
RESTful狀態(tài)轉(zhuǎn)化
查看全部 -
URI:統(tǒng)一資源定位符
查看全部 -
Restful名稱
查看全部 -
1、同F(xiàn)ormatter類似,Converter自定義時(shí)實(shí)現(xiàn)Converter接口,指定泛型<S, T>,即源對象和目標(biāo)對象,然后實(shí)現(xiàn)convert方法;
2、同樣在xml中進(jìn)行配置,將自定義轉(zhuǎn)換器注入FormattingConversionServiceFactoryBean,再將該bean作為mvc的conversion-service
3、不同在于,F(xiàn)ormatter只能將String作為源對象,而Converter則可以自行定義
查看全部 -
1、自定義Formatter需要實(shí)現(xiàn)Formatter接口,并指定泛型(轉(zhuǎn)換后的類型,該視頻例中即為Date),實(shí)現(xiàn)其parse方法
2、配置bean,將自定義Formatter注入到Spring的FormattingConversionServiceFactoryBean類中,采用xml配置方式,同時(shí)將該bean作為mvc的conversion-service(如截圖)
3、注意,這種規(guī)范器是全局的,F(xiàn)ormatter適用于轉(zhuǎn)換String為其他類型,所以一般用在web層,將請求體中的內(nèi)容進(jìn)行轉(zhuǎn)換
對于一個(gè)controller中多個(gè)方法需要做前臺傳過來的日期字符串做日期格式轉(zhuǎn)換操作,可以寫一個(gè)formatter繼承Formatter,然后寫一次字符串轉(zhuǎn)日期的操作,最后在dispatcherServlet中配置一下即可。controller中的所有方法參數(shù)就可以直接寫成日期格式類型,formatter可以幫忙做字符串轉(zhuǎn)日期格式的操作。
查看全部 -
在請求的Url中設(shè)置日期類型的字符串傳遞的時(shí)候,報(bào)400錯(cuò),說明日期綁定失敗,如何使得Url中的日期與controller方法中入?yún)㈩愋蜑镈ate的對象綁定呢?這時(shí),我們就需要注冊自定義屬性編輯器。如圖,@InitBinder("date1")限定參數(shù)為date1,通過Url請求時(shí),先執(zhí)行有此注解的方法,該方法,向數(shù)據(jù)綁定器注冊了新的自定義的屬性編輯器,將Date類型的value設(shè)置為SimpleDateFormat("yyyy-MM-DD"),假如Url傳遞的參數(shù)為date1=2020-02-20,那么就會將Date參數(shù)直接格式化為yyyy-MM-DD格式,并作為controller方法的參數(shù)。完成綁定,可見,通過注解實(shí)現(xiàn)自定義參數(shù)綁定只需要注意兩點(diǎn):①使用注解,綁定傳遞的參數(shù),形如@InitBinder("date1"),綁定的參數(shù)為date1,②基于此注解的方法,必須有一個(gè)參數(shù),且參數(shù)類型為WebDataBinder,通過調(diào)用該對象的registerCustomEdior(_,_)實(shí)現(xiàn)自定義屬性轉(zhuǎn)換的注冊。
查看全部 -
使用PropertyEditor實(shí)現(xiàn)綁定時(shí)的類型轉(zhuǎn)換:(數(shù)據(jù)類型轉(zhuǎn)換器) 請求參數(shù)string到參數(shù)類型(也可能是任意類型)的類型轉(zhuǎn)換,都是使用PropertyEditor類實(shí)現(xiàn)的string到任意參數(shù)的轉(zhuǎn)換的。但是PropertyEditor不能實(shí)現(xiàn)任意對象到任意對象之間的轉(zhuǎn)換,比如我們常見的Long時(shí)間戳到Date類型的轉(zhuǎn)換時(shí)辦不到的。
1、PropertyEditor:在類中進(jìn)行局部使用
2、Formatter:全局,或者使用new Formatter的方式進(jìn)行局部使用,只能轉(zhuǎn)換String到其他類型;
3、Converter:全局或局部,和Formatter類似,但Converter的源對象不僅僅是String,而可以自行進(jìn)行定義
查看全部 -
同樣對于xml類型的數(shù)據(jù)綁定,和json類似,在方法形參上增加注解 @RequestBody,并且在Post請求時(shí)請求頭為Content-Type: application/xml。這樣SpringMVC就會調(diào)用對應(yīng)的解析器去解析,所以我們同時(shí)還需要在pom中添加xml解析的相關(guān)依賴?spring-oxm ,同時(shí)如截圖所示,將xml對應(yīng)的實(shí)體類進(jìn)行注解標(biāo)注,根節(jié)點(diǎn)放在類名,并使用name屬性設(shè)定對應(yīng)的xml中的根節(jié)點(diǎn)名稱,其他節(jié)點(diǎn)同理。
xml 數(shù)據(jù)綁定:必須在實(shí)體類里面加注解@XmlRootElement,在屬性上添加XmlElement ex:@XmlElement(name="age"):此時(shí)就會將xml 里面對應(yīng)的age數(shù)據(jù)添加到實(shí)體類中的age屬性中去。 2、xml數(shù)據(jù)綁定需要“spring-oxm”這個(gè)jar包提供支持
查看全部 -
SpringMVC接受http中body的json格式內(nèi)容為參數(shù),在方法的形參前加上注解 @RequestBody,用以調(diào)用解析器進(jìn)行轉(zhuǎn)換,值得注意的是:
1.在參數(shù)中加注解@RequestBody( @RequestBody User user)。@RequestBody是把傳過來的Json數(shù)據(jù)反序列化綁定到控制器參數(shù)上
2.chrome DHC插件,構(gòu)建post包等
3.json依賴的包:
<groupId>org.codehuas.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
4.需要在dispatcher-servelt.xml中<mvc:annotation-driven />,相當(dāng)于默認(rèn)配置了部分HandlerMapping和HandlerAdapter,如此處需要的RequestMappingHandlerAdapter
查看全部 -
在SpringMVC中綁定Set數(shù)據(jù)類型,接口的參數(shù)形式和綁定list是類似的,都是通過索引。但是不同的在于,Set必須初始化,如圖必須先包含了初始化對象,也即是說必須提前手動(dòng)分配好空間,才能進(jìn)行賦值,而使用List則沒有這個(gè)要求。
另外的一個(gè)坑在于,初始化Set時(shí)需要留意對象的equals方法,假如我們在提前分配兩個(gè)對象空間時(shí),兩個(gè)對象通過equals方法判斷為相同,則我們期望的Set的size為2,最后實(shí)際因?yàn)槿ブ刈兂闪?,導(dǎo)致在數(shù)據(jù)綁定時(shí)很容易出現(xiàn)數(shù)組越界的異常。
Set我們一般用來排重 使用Set的時(shí)候需要先進(jìn)行初始化 要使用Set的排重功能必須在對象中覆寫hashcode和equals方法。 SpringMVC對Set支持并不太好,初始化進(jìn)行排重時(shí)會導(dǎo)致size變小,致使無法接受更多的數(shù)據(jù)而拋出異常,所以我們開發(fā)一般優(yōu)先使用List。
查看全部 -
Controll中List參數(shù)不能直接傳值,需要一個(gè)包裹類,類中有需要傳的List作為屬性和對應(yīng)的get,set方法。 傳值時(shí)用users[0].name = Tom ? ?users[1].name = Luce 一定不要跳躍傳值,如users[0].name = Tom&users[20].name = Lucy 這樣中間的1~19也會占用資源屬性值為空。
查看全部 -
@InitBinder 注解用于初始化一個(gè)對象
對于兩個(gè)不同的類,遇到同名屬性的情況,SpringMVC會默認(rèn)針對所有類的同名屬性賦值,如截圖中的age。如果想要區(qū)別對待,直接使用xxx.xxx的形式是不行的,還需要在對應(yīng)的Controller中定義方法,以 @InitBinder 注解標(biāo)記屬性名,形參使用?WebDataBinder 來定義請求參數(shù)前綴,如截圖。
在url中傳遞參數(shù)的出現(xiàn)同屬性時(shí),可以通過InitBinder方法進(jìn)行初始化,再屬性前加前綴來區(qū)別,若沒加前綴則是共有的?
@InitBinder("user")?
public void intUser(WebDataBinder binder){ binder.setFieldDefaultPrefix("user.");
?}
查看全部 -
對象類型的數(shù)據(jù)綁定,直接請求時(shí)對應(yīng)其屬性即可,不必添加前綴,如截圖中User類的屬性name,則直接在請求中使用name=xxx,而不是使用user.name=xxx的形式。但如果是想對對象中對象的屬性再賦值的話,則需要使用xxx.xxx的形式,如下的contactInfo.phone表示將User類中的ContactInfo類的phone屬性賦值。
查看全部 -
@controller 注解使類生效?
@RequestMapping(value="",meithod = RequestMethod.GET) 指定請求和方法
@RequestParam(value="",required = true)value參數(shù)別名 required 是否必傳默認(rèn)為true?
@RequestParam("xage")int age,xage是別名,別名是xage,客戶端傳上來的也要是xage,名稱要一致
查看全部
舉報(bào)