搭建一个基础的Resty项目框架

作者:gitbooks 时间:2021-06-08 11:12:06 

一个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;
 }
}

来源:https://dreampie.gitbooks.io/resty-chs/content/how.html

标签:框架搭建,Resty,基础
0
投稿

猜你喜欢

  • 使用Stargate访问K8ssandra的过程之Springboot整合Cassandra

    2022-02-08 23:12:25
  • spring webflux自定义netty 参数解析

    2023-07-26 18:38:25
  • Android实现简易浏览器遇到问题的解决方法

    2023-06-15 21:47:56
  • java 算法之希尔排序详解及实现代码

    2022-07-12 23:09:45
  • Android编程基础之获取手机屏幕大小(DisplayMetrics应用)示例

    2023-09-26 17:57:43
  • 浅谈JVM内存溢出原因和解决思路

    2023-11-23 12:24:15
  • SpringBoot自定义MessageConverter与内容协商管理器contentNegotiationManager详解

    2023-11-28 11:35:54
  • java图形用户界面实现菜单功能

    2023-11-23 11:50:58
  • 详解Spring框架注解扫描开启之配置细节

    2022-11-01 18:04:14
  • Java BoxLayout(盒子布局)布局管理器解析

    2022-07-19 05:26:09
  • Java Socket实现多人聊天系统

    2023-08-08 04:44:35
  • C#实现日期格式转换的公共方法类实例

    2023-05-16 10:06:54
  • 迅速掌握Java容器中常用的ArrayList类与Vector类用法

    2022-12-16 16:18:47
  • 带你一文深入认识Java String类

    2023-10-15 10:55:54
  • Java之如何关闭流

    2023-11-04 21:29:11
  • Spring @Profile注解详解

    2023-04-20 06:26:16
  • springboot cloud使用eureka整合分布式事务组件Seata 的方法

    2023-08-19 13:49:44
  • Android应用内悬浮窗Activity的简单实现

    2023-07-28 04:03:00
  • Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程

    2023-03-21 21:22:27
  • java isInterrupted()判断线程的实例讲解

    2023-07-21 01:45:53
  • asp之家 软件编程 m.aspxhome.com