搭建一個基礎(chǔ)的Resty項目框架
一個Resty項目包含的部分(resty-route):
1. RestFilter
像其他web框架一樣,Resty也需要一個入口,在web.xml里配置,和常規(guī)的Filter區(qū)別不大
<filter> <filter-name>RestyFilter</filter-name> <filter-class>cn.dreampie.route.RestyFilter</filter-class> <init-param> <param-name>exclusions</param-name> <!--把不經(jīng)過Resty過濾的文件或者目錄配置在這兒,逗號分割--> <param-value>/**/*.js,/**/*.gif,/**/*.jpg,/**/*.png,/**/*.css,/**/*.ico,/druid/**</param-value> </init-param> <init-param> <!--Resty的核心配置文件,看第2點--> <param-name>configClass</param-name> <param-value>cn.dreampie.config.AppConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>RestyFilter</filter-name> <!--過濾的路徑--> <url-pattern>/*</url-pattern> </filter-mapping>
2. Config
Resty的核心配置文件,你需要自己編寫一個Config的java文件,并繼承Config類,參考如下,根據(jù)自己的實際情況選擇配置
public class AppConfig extends Config { /** * Config constant * 配置常量,目前只能配置render,其他全局配置會自動讀取根目錄下的application.properties文件 */ public void configConstant(ConstantLoader constantLoader) { //通過后綴來返回不同的數(shù)據(jù)類型 你可以自定義自己的 render //如:public class FreemarkerRender extends Render{} //目前支持json,text,file三種輸出 //constantLoader.addRender("ftl", new FreemarkerRender()); } /** * Config resource * 配置Resource的掃描目錄 */ public void configResource(ResourceLoader resourceLoader) { //設(shè)置resource的目錄 Resty啟動時通過掃描配置的目錄來添加Resouce //排除某個目錄 //resourceLoader.addExcludePackages("cn.dreampie.resource"); //掃描某個目錄 resourceLoader.addIncludePackages("cn.dreampie.resource"); } /** * Config plugin * 配置插件 數(shù)據(jù)庫相關(guān)配置信息和constant一樣 都會自動讀取application.properties文件 */ public void configPlugin(PluginLoader pluginLoader) { //第一個數(shù)據(jù)源 使用c3p0連接池,數(shù)據(jù)源名字 default //C3p0DataSourceProvider cdsp = new C3p0DataSourceProvider("default"); //activerecord 初始化會從數(shù)據(jù)庫獲取表的元數(shù)據(jù) 并映射到class //ActiveRecordPlugin activeRecordCdsp = new ActiveRecordPlugin(cdsp, true); //排除的model目錄 //activeRecordCdsp.addExcludePackages("cn.dreampie.orm"); //掃描的model目錄 //activeRecordCdsp.addIncludePackages("cn.dreampie.orm"); //pluginLoader.add(activeRecordCdsp); //第二個數(shù)據(jù)源 使用druid連接池 數(shù)據(jù)源名字 demo //DruidDataSourceProvider ddsp = new DruidDataSourceProvider("demo"); //ActiveRecordPlugin activeRecordDdsp = new ActiveRecordPlugin(ddsp, true); //pluginLoader.add(activeRecordDdsp); //jndi數(shù)據(jù)源 數(shù)據(jù)源名字jndiDs //JndiDataSourceProvider jdsp=new JndiDataSourceProvider("jndiDs","jndiName"); //ActiveRecordPlugin activeRecordJdsp = new ActiveRecordPlugin(ddsp, true); //pluginLoader.add(activeRecordJdsp); } /** * Config interceptor applied to all actions. * 全局?jǐn)r截,會在進(jìn)入路由后,執(zhí)行方法前執(zhí)前 */ public void configInterceptor(InterceptorLoader interceptorLoader) { //權(quán)限攔截器 //interceptorLoader.add(new SecurityInterceptor(2, new MyAuthenticateService())); //Resource層事務(wù)的攔截器 @Transaction //interceptorLoader.add(new TransactionInterceptor()); } /** * Config handler * 全局的攔截,會在進(jìn)入路由前執(zhí)行 */ public void configHandler(HandlerLoader handlerLoader) { //跨域 handlerLoader.add(new CORSHandler()); } /** * Call back after Resty start */ public void afterStart() { //Resty啟動前執(zhí)行的操作 } /** * Call back before Resty stop */ public void beforeStop() { //Resty停止前執(zhí)行的操作 }
3. resources
application.properties 系統(tǒng)全局的配置信息
#not must auto load app.encoding=UTF-8 app.devMode=true app.showRoute=false app.cacheEnabled=true app.cacheManager=cn.dreampie.cache.redis.RedisCacheManager ##druid plugin auto load db.default.url=jdbc:mysql://127.0.0.1/example?useUnicode=true&characterEncoding=UTF-8 db.default.user=dev db.default.password=dev1010 db.default.dialect=mysql #c3p0配置 c3p0.default.minPoolSize=3 c3p0.default.maxPoolSize=20 #druid配置 #druid.default.initialSize=10 #druid.default.maxPoolPreparedStatementPerConnectionSize=20 #druid.default.timeBetweenConnectErrorMillis=1000 #druid.default.filters=slf4j,stat,wall #flyway database migration auto load flyway.default.valid.clean=true flyway.default.migration.auto=true flyway.default.migration.initOnMigrate=true db.demo.url=jdbc:mysql://127.0.0.1/demo?useUnicode=true&characterEncoding=UTF-8 db.demo.user=dev db.demo.password=dev1010 db.demo.dialect=mysql #druid druid.demo.initialSize=10 druid.demo.maxPoolPreparedStatementPerConnectionSize=20 druid.demo.timeBetweenConnectErrorMillis=1000 druid.demo.filters=slf4j,stat,wall #flyway flyway.demo.valid.clean=true flyway.demo.migration.auto=true flyway.demo.migration.initOnMigrate=true
4. 編寫一個Resource
如果我們需要在url中體現(xiàn)版本推薦首先創(chuàng)建一個ApiResource的基礎(chǔ)Resource的java類
/** * 通過@API 來知道api的url,如果子對象也使用了@API注解,他們的url會拼接 */ @API("/api/v1.0") public class ApiResource extends Resource { /** * 基礎(chǔ)的api Resource 用來添加基礎(chǔ)的路徑或版本號 和一些公用方法 */ } /** *上面說到@API會被拼接,那么TestResource的api就是 /api/v1.0/tests */ @API("/tests") public class TestResource extends ApiResource { /** * @GET 沒有指定url時,訪問改方法的api為 GET /api/v1.0/tests */ @GET public WebResult get() { //如果需要返回請求狀態(tài) 使用new WebResult return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2")); } /** * @GET("/:name") 或 @GET("/{name}") 來設(shè)置url參數(shù) */ @GET("/:name") public WebResult get(String name) { //如果需要返回請求狀態(tài) 使用new WebResult return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2")); } /** * 訪問改方法的api為 POST /api/v1.0/tests/post * 傳入?yún)?shù)時 test=j(luò)son字符串 */ @POST("/post") public Map post(Map<String, String> test) { return test; } }
以上就是搭建一個基礎(chǔ)的Resty項目框架的詳細(xì)內(nèi)容,更多關(guān)于搭建Resty項目框架的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Spring中利用@Order注解對bean和依賴進(jìn)行排序
在Spring框架中,@Order是一個經(jīng)常被忽視但非常重要的注解,在項目開發(fā)中,當(dāng)我們需要維護(hù)bean的特定順序或者存在許多相同類型的bean時,這個注解就發(fā)揮了作用,這篇文章講的就是如何利用@Order注解對bean和依賴進(jìn)行排序,需要的朋友可以參考下2023-11-11springboot使用Hutool的JschUtil及下載安裝步驟
這篇文章主要為大家介紹了springboot使用Hutool的JschUtil的方法及下載安裝詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08java核心編程之文件過濾類FileFilter和FilenameFilter
這篇文章主要為大家詳細(xì)介紹了java文件過濾類FileFilter和FilenameFilter,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Hbase、elasticsearch整合中jar包沖突的問題解決
本篇文章主要介紹了Hbase、elasticsearch整合中jar包沖突的問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12