搭建一个基础的Resty项目框架
更新时间:2022年3月7日 16:52 点击:196 作者:gitbooks
一个Resty项目包含的部分(resty-route):
1. RestFilter
像其他web框架一样,Resty也需要一个入口,在web.xml里配置,和常规的Filter区别不大
<filter> <filter-name>RestyFilter</filter-name> <filter-class>cn.dreampie.route.RestyFilter</filter-class> <init-param> <param-name>exclusions</param-name> <!--把不经过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类,参考如下,根据自己的实际情况选择配置
public class AppConfig extends Config { /** * Config constant * 配置常量,目前只能配置render,其他全局配置会自动读取根目录下的application.properties文件 */ public void configConstant(ConstantLoader constantLoader) { //通过后缀来返回不同的数据类型 你可以自定义自己的 render //如:public class FreemarkerRender extends Render{} //目前支持json,text,file三种输出 //constantLoader.addRender("ftl", new FreemarkerRender()); } /** * Config resource * 配置Resource的扫描目录 */ public void configResource(ResourceLoader resourceLoader) { //设置resource的目录 Resty启动时通过扫描配置的目录来添加Resouce //排除某个目录 //resourceLoader.addExcludePackages("cn.dreampie.resource"); //扫描某个目录 resourceLoader.addIncludePackages("cn.dreampie.resource"); } /** * Config plugin * 配置插件 数据库相关配置信息和constant一样 都会自动读取application.properties文件 */ public void configPlugin(PluginLoader pluginLoader) { //第一个数据源 使用c3p0连接池,数据源名字 default //C3p0DataSourceProvider cdsp = new C3p0DataSourceProvider("default"); //activerecord 初始化会从数据库获取表的元数据 并映射到class //ActiveRecordPlugin activeRecordCdsp = new ActiveRecordPlugin(cdsp, true); //排除的model目录 //activeRecordCdsp.addExcludePackages("cn.dreampie.orm"); //扫描的model目录 //activeRecordCdsp.addIncludePackages("cn.dreampie.orm"); //pluginLoader.add(activeRecordCdsp); //第二个数据源 使用druid连接池 数据源名字 demo //DruidDataSourceProvider ddsp = new DruidDataSourceProvider("demo"); //ActiveRecordPlugin activeRecordDdsp = new ActiveRecordPlugin(ddsp, true); //pluginLoader.add(activeRecordDdsp); //jndi数据源 数据源名字jndiDs //JndiDataSourceProvider jdsp=new JndiDataSourceProvider("jndiDs","jndiName"); //ActiveRecordPlugin activeRecordJdsp = new ActiveRecordPlugin(ddsp, true); //pluginLoader.add(activeRecordJdsp); } /** * Config interceptor applied to all actions. * 全局拦截,会在进入路由后,执行方法前执前 */ public void configInterceptor(InterceptorLoader interceptorLoader) { //权限拦截器 //interceptorLoader.add(new SecurityInterceptor(2, new MyAuthenticateService())); //Resource层事务的拦截器 @Transaction //interceptorLoader.add(new TransactionInterceptor()); } /** * Config handler * 全局的拦截,会在进入路由前执行 */ public void configHandler(HandlerLoader handlerLoader) { //跨域 handlerLoader.add(new CORSHandler()); } /** * Call back after Resty start */ public void afterStart() { //Resty启动前执行的操作 } /** * Call back before Resty stop */ public void beforeStop() { //Resty停止前执行的操作 }
3. resources
application.properties 系统全局的配置信息
#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中体现版本推荐首先创建一个ApiResource的基础Resource的java类
/** * 通过@API 来知道api的url,如果子对象也使用了@API注解,他们的url会拼接 */ @API("/api/v1.0") public class ApiResource extends Resource { /** * 基础的api Resource 用来添加基础的路径或版本号 和一些公用方法 */ } /** *上面说到@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() { //如果需要返回请求状态 使用new WebResult return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2")); } /** * @GET("/:name") 或 @GET("/{name}") 来设置url参数 */ @GET("/:name") public WebResult get(String name) { //如果需要返回请求状态 使用new WebResult return new WebResult(HttpStatus.OK, Maper.of("a", "1", "b", "2")); } /** * 访问改方法的api为 POST /api/v1.0/tests/post * 传入参数时 test=json字符串 */ @POST("/post") public Map post(Map<String, String> test) { return test; } }
以上就是搭建一个基础的Resty项目框架的详细内容,更多关于搭建Resty项目框架的资料请关注猪先飞其它相关文章!
原文出处:https://dreampie.gitbooks.io/resty-chs/content/how.html
上一篇: Java实现替换PDF中的字体功能
下一篇: Java多线程异步调用性能调优方法详解
相关文章
- 一、下载pthreads扩展下载地址:http://windows.php.net/downloads/pecl/releases/pthreads二、判断PHP是ts还是nts版通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说...2015-11-24
- session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
- Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。本教程我们来学习一下Flex布局的基本语法知识及运用实例。 网页布局(layout)是CSS的一...2016-09-14
- 通过这篇文章帮助大家快速学习JavaScript DOM操作基础的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧...2021-04-30
- 一聚教程网 从零开始的html教程(7),html表单的基础,零基础也能轻松学会html,希望大家喜欢 一、html的表单 表单负责网页中用户输入数据采集的功能,利用<form>标签来定...2016-12-31
- 在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范,下面这篇文章主要给大家介绍了关于OpenResty中正则模式匹配的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。...2020-06-30
- 这篇文章主要介绍了python局部变量和全局变量,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...2021-10-22
- 今天小编在这里就来给Painter的这一款软件的使用者们来说下基础教程之图像水管,各位想知道的使用者们,那么下面就快来跟着小编一起看看吧。 给各位Painter软件的使...2016-09-14
- jQuery的Ajax带来了无需刷新的web页面革命。这里就详细介绍一下jQuery所涉及到的Ajax操作。(无需特殊说明,均需要有服务器配置,这里本人用的是Tomcat 7)1.基于请求加载文件数据这里的请求通常都是网页的某些操作,如点击等...2015-11-24
- 这篇文章主要为大家介绍了python开发App基础操作API使用的示例过程有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2021-10-30
- 这篇文章主要介绍了C语言入门之基础知识详解,文中有非常详细的C语言使用教程及相关基础知识,对正在学习c语言的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-08-04
- JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,这篇文章主要给大家介绍了关于Java反射之基础篇的相关资料,需要的朋友可以参考下...2021-11-18
- 这篇文章主要介绍了java 基础知识之IO总结的相关资料,Java中的I/O分为两种类型,一种是顺序读取,一种是随机读取,需要的朋友可以参考下,希望对你有帮助...2021-08-02
- 在本篇文章里小编给大家分享的是一篇关于Python3基础语法知识点总结内容,有兴趣的朋友们可以学习下,希望能够给你带来帮助...2021-10-08
- .Net开发基础系列文章,对自己之前写过的代码备忘,如能给人予帮助,不甚荣幸。个人能力有限,如有差错或不足,请及时指正。...2021-09-22
- 一篇关于php 入门的朋友参考的关于文件和目录的各种操作函数与实例应用,有需要的朋友可以简单的参考一下。 本章可以算是上一章的延续,介绍了除文件实际内容之外的...2016-11-25
- 今天小编就为大家分享一篇关于Lua基础之运算符的使用示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-30
- 下面小编就为大家带来一篇jQuery基础_入门必看知识点。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-07-06
- 这篇文章主要介绍了java并发编程线程的基础知识,文中讲解非常详细,帮助大家更好的学习JAVA并发编程,感兴趣想学习JAVA的可以了解下...2020-06-30
- 这篇文章主要为大家介绍了关于C语言文件操作方式的详细总结,建议收藏随用随看,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-10-14