解釋如下:
例如對使用者資訊進行增刪改查操作,傳統做法
增: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 ...