搭建一個(gè)基礎(chǔ)的Resty項(xiàng)目框架
一個(gè)Resty項(xiàng)目包含的部分(resty-route):
1. RestFilter
像其他web框架一樣,Resty也需要一個(gè)入口,在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)過(guò)Resty過(guò)濾的文件或者目錄配置在這兒,逗號(hào)分割-->
<param-value>/**/*.js,/**/*.gif,/**/*.jpg,/**/*.png,/**/*.css,/**/*.ico,/druid/**</param-value>
</init-param>
<init-param>
<!--Resty的核心配置文件,看第2點(diǎn)-->
<param-name>configClass</param-name>
<param-value>cn.dreampie.config.AppConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RestyFilter</filter-name>
<!--過(guò)濾的路徑-->
<url-pattern>/*</url-pattern>
</filter-mapping>
2. Config
Resty的核心配置文件,你需要自己編寫(xiě)一個(gè)Config的java文件,并繼承Config類(lèi),參考如下,根據(jù)自己的實(shí)際情況選擇配置
public class AppConfig extends Config {
/**
* Config constant
* 配置常量,目前只能配置render,其他全局配置會(huì)自動(dòng)讀取根目錄下的application.properties文件
*/
public void configConstant(ConstantLoader constantLoader) {
//通過(guò)后綴來(lái)返回不同的數(shù)據(jù)類(lèi)型 你可以自定義自己的 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啟動(dòng)時(shí)通過(guò)掃描配置的目錄來(lái)添加Resouce
//排除某個(gè)目錄
//resourceLoader.addExcludePackages("cn.dreampie.resource");
//掃描某個(gè)目錄
resourceLoader.addIncludePackages("cn.dreampie.resource");
}
/**
* Config plugin
* 配置插件 數(shù)據(jù)庫(kù)相關(guān)配置信息和constant一樣 都會(huì)自動(dòng)讀取application.properties文件
*/
public void configPlugin(PluginLoader pluginLoader) {
//第一個(gè)數(shù)據(jù)源 使用c3p0連接池,數(shù)據(jù)源名字 default
//C3p0DataSourceProvider cdsp = new C3p0DataSourceProvider("default");
//activerecord 初始化會(huì)從數(shù)據(jù)庫(kù)獲取表的元數(shù)據(jù) 并映射到class
//ActiveRecordPlugin activeRecordCdsp = new ActiveRecordPlugin(cdsp, true);
//排除的model目錄
//activeRecordCdsp.addExcludePackages("cn.dreampie.orm");
//掃描的model目錄
//activeRecordCdsp.addIncludePackages("cn.dreampie.orm");
//pluginLoader.add(activeRecordCdsp);
//第二個(gè)數(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截,會(huì)在進(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
* 全局的攔截,會(huì)在進(jìn)入路由前執(zhí)行
*/
public void configHandler(HandlerLoader handlerLoader) {
//跨域
handlerLoader.add(new CORSHandler());
}
/**
* Call back after Resty start
*/
public void afterStart() {
//Resty啟動(dòng)前執(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. 編寫(xiě)一個(gè)Resource
如果我們需要在url中體現(xiàn)版本推薦首先創(chuàng)建一個(gè)ApiResource的基礎(chǔ)Resource的java類(lèi)
/**
* 通過(guò)@API 來(lái)知道api的url,如果子對(duì)象也使用了@API注解,他們的url會(huì)拼接
*/
@API("/api/v1.0")
public class ApiResource extends Resource {
/**
* 基礎(chǔ)的api Resource 用來(lái)添加基礎(chǔ)的路徑或版本號(hào) 和一些公用方法
*/
}
/**
*上面說(shuō)到@API會(huì)被拼接,那么TestResource的api就是 /api/v1.0/tests
*/
@API("/tests")
public class TestResource extends ApiResource {
/**
* @GET 沒(méi)有指定url時(shí),訪問(wèn)改方法的api為 GET /api/v1.0/tests
*/
@GET
public WebResult get() {
//如果需要返回請(qǐng)求狀態(tài) 使用new WebResult
return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2"));
}
/**
* @GET("/:name") 或 @GET("/{name}") 來(lái)設(shè)置url參數(shù)
*/
@GET("/:name")
public WebResult get(String name) {
//如果需要返回請(qǐng)求狀態(tài) 使用new WebResult
return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2"));
}
/**
* 訪問(wèn)改方法的api為 POST /api/v1.0/tests/post
* 傳入?yún)?shù)時(shí) test=j(luò)son字符串
*/
@POST("/post")
public Map post(Map<String, String> test) {
return test;
}
}以上就是搭建一個(gè)基礎(chǔ)的Resty項(xiàng)目框架的詳細(xì)內(nèi)容,更多關(guān)于搭建Resty項(xiàng)目框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
為什么程序中突然多了 200 個(gè) Dubbo-thread 線程的說(shuō)明
這篇文章主要介紹了為什么程序中突然多了 200 個(gè) Dubbo-thread 線程的說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解
這篇文章主要介紹了java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解,對(duì)常量池的好處以及基本類(lèi)型的包裝類(lèi)常量池等作了簡(jiǎn)要分析,有需要的朋友可以借鑒參考下2021-09-09
SpringBoot項(xiàng)目啟動(dòng)后再請(qǐng)求遠(yuǎn)程接口的解決方式
Spring?Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化Spring應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等,這篇文章主要介紹了SpringBoot項(xiàng)目啟動(dòng)后再請(qǐng)求遠(yuǎn)程接口的實(shí)現(xiàn)方式?,需要的朋友可以參考下2023-02-02
log4j.properties 配置(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇log4j.properties 配置(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Java使用continue語(yǔ)句的實(shí)例詳解
這篇文章主要介紹了Java使用continue語(yǔ)句的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握使用方法,需要的朋友可以參考下2017-10-10
spring中@Transactional?注解失效的原因及解決辦法
面試中經(jīng)常會(huì)被問(wèn)到事務(wù)失效的場(chǎng)景有哪些,本文主要介紹了spring中@Transactional?注解失效的原因及解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

