版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、springboot 很好支持 web 開(kāi)發(fā)spring-boot-starter-web 是 Spring Boot 對(duì) Web 開(kāi) 發(fā)的支持, 主要包括 RESTful 、參數(shù)校驗(yàn)、 使用 Tomcat 作 為內(nèi)嵌容器等功能,接下來(lái)一一介紹。 Json 的支持在 Spring Boot 體系中,天然對(duì) Json 支持,在上篇文章中給 大家做了簡(jiǎn)單的演示,這次來(lái)深入使用一番。新建一個(gè)項(xiàng)目 spring-boot-web ,添加上篇同樣的組件依賴,導(dǎo)入項(xiàng)目到 Idea 中。在項(xiàng)目路徑下新建 domain 包,在包下新建一個(gè) 實(shí)體類 User , User 信息如下: public class
2、User private String name;private int age;private String pass;/setter 、 getter 省略在項(xiàng)目中新建 web 包,并在 web 包下新建一個(gè)類 WebController ,在類中創(chuàng)建一個(gè)方法返回 User ,如下: RestController public class WebController RequestMapping(/getUser)public User getUser() User user=new User();user.setName( 小明 );user.setAge(12); user.setPa
3、ss(123456); return user;在 Test 包下新建 WebControllerTest 測(cè)試類,對(duì) getUser() 方法進(jìn)行測(cè)試。 SpringBootTest public class WebControllerTest /省略部分代碼Testpublic void getUser() throws Exception mockMvc.perform(MockMvcRequestBuilders.post(/getUs er).andDo(print();返回結(jié)果如下: name: 小明 ,age:12,pass:123456 說(shuō)明 Spring Boot 自動(dòng)將 U
4、ser 對(duì)象轉(zhuǎn)成了 Json 進(jìn)行返 回。那么如果返回的是一個(gè) list 呢,在 WebController 添 加方法 getUsers() : RequestMapping(/getUsers)public List<User> getUsers() List<User> users=newArrayList<User>();User user1=new User();user1.setName(neo); user1.setAge(30);user1.setPass(neo123); users.add(user1);User user2=new Us
5、er(); user2.setName( 小明 ); user2.setAge(12); user2.setPass(123456); users.add(user2);return users;添加測(cè)試方法進(jìn)行測(cè)試,返回內(nèi)容如下: name:neo,age:30,pass:neo123,name: 小明 ,age:12,pass:123456說(shuō)明不管是對(duì)象還是集合或者對(duì)象嵌套, Spring Boot 均可 以將其轉(zhuǎn)化為 Json 字符串, 特別適合我們給其他系統(tǒng)提供 接口時(shí)使用。 請(qǐng)求傳參使用 Spirng Boot 可以輕松的對(duì)請(qǐng)求 做一些限制,比如為了安全只允許 POST 請(qǐng)求的訪問(wèn)。
6、只 需要在方法上添加一個(gè)配置即可:RequestMapping(name=/getUser, method=RequestMethod.POST) public User getUser() 這時(shí)候再以 get 請(qǐng)求去訪問(wèn), 就會(huì)返回: Request method GET not supported 。 Spring Web 層支持多種方法傳參, 上篇文章中傳入一個(gè)屬性 name ,其直接使用對(duì)象接收也是 支持的。 RequestMapping(name=/getUser, method= RequestMethod.POST)public String getUser(User user)
7、 這樣的寫(xiě)法,只要是 User 的屬性都會(huì)被自動(dòng)填充到 user 對(duì)象中。還有另外一種傳參的方式。使用 Url 進(jìn)行傳參,這 種形式的傳參地址欄會(huì)更加美觀一些。RequestMapping(value=get/name, method=RequestMethod.GET) public User get(PathVariable String name) User user=new User(); user.setName(name);return user;瀏覽器訪問(wèn): http:/localhost:8080/get/neo ,返回:name:neo,age:0,pass:null ,說(shuō)明
8、 name 值已經(jīng)傳 入成功。參數(shù)校驗(yàn)參數(shù)校驗(yàn)在我們?nèi)粘i_(kāi)發(fā)中非常常見(jiàn),最 基本的校驗(yàn)有判斷屬性是否為空、長(zhǎng)度是否符合要求等,在 傳統(tǒng)的開(kāi)發(fā)模式中需要寫(xiě)一堆的 if else 來(lái)處理這些邏輯, 很繁瑣,效率也低。使用 Valid + BindingResult 就可以 優(yōu)雅地解決這些問(wèn)題,接下來(lái)看看示例:首先在 WebController 添加一個(gè)保存用戶的方法 saveUser ,參數(shù) 為 User ,現(xiàn)在需要對(duì)參數(shù) User 做校驗(yàn): public class User NotEmpty(message= 姓名不能為空 )private String name;Max(value = 10
9、0, message = 年齡不能大于 100 歲)Min(value= 18 ,message= 必須年滿 18 歲! ) private int age;NotEmpty(message= 密碼不能為空 ) Length(min=6,message= 密碼長(zhǎng)度不能小于 6 位 ) private String pass;/. 對(duì)不同的屬性,按照規(guī)則添加了不同校驗(yàn)內(nèi)容。Spring Boot的參數(shù)校驗(yàn)其實(shí)是依賴于 hibernate-validator 來(lái)進(jìn)行。 現(xiàn)在 模擬對(duì)參數(shù) User 進(jìn)行參數(shù)校驗(yàn),使用 Valid + BindingResult ,校驗(yàn)后如果有錯(cuò)誤將錯(cuò)誤打印出來(lái),代碼
10、如 下: RequestMapping(/saveUser)public void saveUser(Valid User user,BindingResult result) if(result.hasErrors() List<ObjectError> list = result.getAllErrors(); for (ObjectError error : list) + - + error.getDefaultMessage();添加測(cè)試方法進(jìn)行測(cè)試: Testpublic void saveUsers() throws Exception mockMvc.perform
11、(MockMvcRequestBuilders.post(/saveU ser).param(name,).param(age,666).param(pass,test).andDo(print();結(jié)果返回: user:name=,age=666,pass=testMax- 年齡不能大于 100 歲 Length- 密碼長(zhǎng)度不能小于 6 位 NotEmpty- 姓名不能為空 結(jié)果顯示均已經(jīng)觸發(fā)了校驗(yàn)規(guī)則,返回了錯(cuò)誤信息,在實(shí)際 使用過(guò)程中可以對(duì)錯(cuò)誤信息進(jìn)行包裝,最后返回到前端進(jìn)行 展示。自定義 Filter 我們常常在項(xiàng)目中會(huì)使用 Filters 用于 記錄請(qǐng)求日志、排除有 XSS 威脅的字
12、符、執(zhí)行權(quán)限驗(yàn)證等 等。 Spring Boot 自動(dòng)添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter ,并且可以自定義 Filter 。自定義 Filter 兩個(gè)步驟:實(shí)現(xiàn) Filter 接口,實(shí)現(xiàn) Filter 方法 添加 Configuration 注解,將自定義 Filter 加入過(guò)濾鏈新建 MyFilter 類,使用 doFilter() 方法: public class MyFilter implements Filter Overridepublic void destroy() / TODO Auto-gen
13、erated method stub Overridepublic void doFilter(ServletRequest srequest,ServletResponse sresponse, FilterChain filterChain)throws IOException, ServletException / TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) srequest;MyFilter,url :+request.getRequestURI(); filterC
14、hain.doFilter(srequest, sresponse); Overridepublic void init(FilterConfig arg0) throws ServletException / TODO Auto-generated method stub將自定義 Filter 加入過(guò)濾鏈: Configurationpublic class WebConfiguration Beanpublic RemoteIpFilter remoteIpFilter() return new RemoteIpFilter(); Beanpublic FilterRegistration
15、Bean testFilterRegistration() FilterRegistrationBean registration = newFilterRegistrationBean();registration.setFilter(new MyFilter(); registration.addUrlPatterns(/*); registration.addInitParameter(paramName, paramValue);registration.setName(MyFilter); registration.setOrder(1);return registration;添加
16、完后啟動(dòng)項(xiàng)目,訪問(wèn)任意的Url ,都會(huì)看到控制臺(tái)打印如下信息: this is MyFilter,url :/xxx說(shuō)明 MyFilter 已經(jīng)對(duì)所有的 Url 進(jìn)行了監(jiān)控,在實(shí)際使用 的過(guò)程中, 常常利用這個(gè)特性進(jìn)行 session 驗(yàn)證, 判斷用戶 是否登錄。自定義 Property 在 Web 開(kāi)發(fā)的過(guò)程中,經(jīng)常 需要自定義一些配置文件,如何使用呢?配置在 perties 中 純潔的微笑 分享生活和技術(shù) 自定義配置類: Component public class NeoProperties private String title;private Stri
17、ng description;/ 省略 getter settet 方法 寫(xiě)單元測(cè)試進(jìn)行驗(yàn)證: RunWith(SpringRunner.class) SpringBootTest public class PropertiesTest Resourceprivate NeoProperties properties; Test public void testProperties() throws Exception ();運(yùn)行 test 后輸出結(jié)果: text title: 純潔的微笑 description: 分 享生活和技術(shù)如果測(cè)試中出現(xiàn)中文亂碼,可安裝以下方法進(jìn) 行設(shè)置:依次單擊 File | Settings | Editor | File Encodings 命令,將
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)內(nèi)沿海集裝箱貨運(yùn)代理協(xié)議新
- 經(jīng)典供貨合同范文樣本
- 生物中圖版自主訓(xùn)練:第二單元第一章第二節(jié)分離規(guī)律試驗(yàn)
- 二手電動(dòng)車買賣協(xié)議范例
- 中介合作協(xié)議2024年
- 房產(chǎn)中介居間服務(wù)合同范本2024年
- 標(biāo)準(zhǔn)建設(shè)工程設(shè)計(jì)合同
- 連尚網(wǎng)絡(luò)科技公司員工激勵(lì)問(wèn)題及優(yōu)化建議9700字
- 2024年兩家公司合作經(jīng)營(yíng)協(xié)議
- 2024年汪君的離婚協(xié)議書(shū)
- 2024年秋季新人教PEP版3年級(jí)上冊(cè)英語(yǔ)全冊(cè)課件(新版教材)
- 2024年菱角項(xiàng)目可行性研究報(bào)告
- 農(nóng)產(chǎn)品質(zhì)量追溯系統(tǒng)操作手冊(cè)
- 道法珍惜師生情誼教學(xué)課件 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 2024年高考真題-化學(xué)(貴州卷) 含答案
- 2024-2030年中國(guó)線束行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 居間戰(zhàn)略合作協(xié)議書(shū)范本
- 新課標(biāo)視角下初中數(shù)學(xué)閱讀教學(xué)現(xiàn)狀調(diào)查與分析
- 高中體育人教版課程教學(xué)分析
- 2024新蘇教版一年級(jí)數(shù)學(xué)冊(cè)第三單元第1課《圖形的初步認(rèn)識(shí)》課件
- 中國(guó)醫(yī)藥公開(kāi)招聘公司總監(jiān)等高級(jí)管理崗位(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
評(píng)論
0/150
提交評(píng)論