使用springboot開發restful Api

2021-09-10 18:48:04 字數 4859 閱讀 1515

解釋如下

例如對使用者資訊進行增刪改查操作,傳統做法

增:adduser()

刪:deleteuser()

改:updateuser()

查:selectuser()

這四個操作,分別對於四個入口,對使用者進行操作,在restful中,url代表資源,增刪改查均為對使用者進行操作,即操作的為/user這個資源,無論增刪改查,其url均保持一致,問題來了,url一致,如何區分增刪改查? 在restful中,使用使用http方法描述行為,即增為post請求,刪為delete請求,改為put請求,查為get請求,通過http的請求方法,即可實現同一url的請求分發。

**演示如下:

user實體類:

public class user 

public void setbirthday(date birthday)

public string getid()

public void setid(string id)

public string get***()

public void set***(string ***)

public string getusername()

public void setusername(string username)

public string getpassword()

public void setpassword(string password)

}

usercontroller

@restcontroller

public class usercontroller

/*** 更新使用者

*/public user update(@valid @requestbody user user, bindingresult errors)

system.out.println(user.getusername());

system.out.println(user.getbirthday());

user.setid("1");

return user;

}//建立使用者

public user creat(@valid @requestbody user user, bindingresult errors)

system.out.println(user.getusername());

system.out.println(user.getbirthday());

user.setid("1");

return user;

}//查詢使用者

public listquery(user user, @pageabledefault(page = 1, size = 10, sort = "username,asc") pageable pageable)

在類上標註@restcontroller標識,宣告其為restfulapi,即可返回json資料,增刪改查方法對應的url一致,根據其不同型別,分發至不同的http方法處理器中。

使用mockmvc 執行測試用例:

@runwith(springrunner.class)

@springboottest

public class usercontrollertest

@test

public void whengetinfosuccess() throws exception

@test

public void whencreatsuccess() throws exception ";

string result = mockmvc.perform(mockmvcrequestbuilders.post("/user").

.content(content))

.andexpect(mockmvcresultmatchers.status().isok())

.andexpect(mockmvcresultmatchers.jsonpath("$.id").value("1"))

.andreturn().getresponse().getcontentasstring();

system.out.println(result);

}@test

public void whenupdatesuccess() throws exception ";

string result = mockmvc.perform(mockmvcrequestbuilders.put("/user/1").

.content(content))

.andexpect(mockmvcresultmatchers.status().isok())

.andexpect(mockmvcresultmatchers.jsonpath("$.id").value("1"))

.andreturn().getresponse().getcontentasstring();

system.out.println(result);

}@test

public void whendeletesuccess() throws exception

}

public class timefilter implements filter 

@override

public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception

@override

public void destroy()

}

過濾器寫好之後需要進行配置

@configuration

public class webconfig extends webmvcconfigureradapter

}

使用interceptor對請求進行攔截

}對***進行配置

@configuration

public class webconfig extends webmvcconfigureradapter

@bean

public filterregistrationbean timefilter()

}

使用切面對請求進行攔截,首先需要在類上宣告@aspect註解表明這是乙個切面,其次需要在方法上宣告切入點及通知方法,示例如下

@aspect

@component

public class timeaspect

long start = new date().gettime();

object obj = pjp.proceed();

system.out.println("切面執行的時間為:" + (new date().gettime() - start));

return obj;

}}

過濾器,***,切面均可實現對請求時間的記錄,那他們之間有什麼區別?

過濾器:在過濾器中只可以拿到請求的url及訪問的引數

***:不僅可以拿到請求的url及訪問引數,還可以得到具體訪問的類名及方法名

切面:除了可以拿到引數之外,還可以拿到目標方法的返回物件

在實際應用中,可根據需求使用不同的實現方式。

}}使用非同步方法對效能進行提公升:

@restcontroller

public class asynccontroller

//非同步rest處理模式

private callableasyncorder() throws interruptedexception

};logger.info("主線程結束");

return result;

}}至此resutful風格的api就告一段落,接下來會寫一些關於許可權的文章,例如如何通過springsecurity對api進行保護,在學習過程中如有疑問,可將疑問傳送至我的郵箱([email protected]),歡迎交流 .

springboot中使用cache和redis

知識點 springboot中使用cache和redis 1 springboot中,整合了cache,我們只需要,在入口類上加 enablecaching 即可開啟快取 例如 在service層使用 cacheable和cacheevict org.springframework.boot spr...

如何使用SpringBoot開發專案

首先對於spring來說,springboot的特點就是自動裝配,也就是說相對於spring來說就是更加簡單,少了許多的配置檔案,這些東西springboot都幫助我們進行了自動裝配。這篇文章主要說 yaml 註解 thymeleaf 不屬於springboot,但是我們在這裡做一些講解,主要為了方...

在eclipse中使用tomcat開發RED5專案

在eclipse中使用tomcat 像開發普通j2ee專案一樣開發red5專案 介紹 版本 red5 0.7 eclipse3.3.1 myeclipse 5.1 tomcat 6.0.16 1。檢視 tomcat home conf catalina localhost 目錄下是否有與 red5 ...