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

目录
  • 1.RestFilter
  • 2.Config
  • 3.resources
  • 4.编写一个Resource

一个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项目框架的资料请关注我们其它相关文章!

(0)

相关推荐

  • OpenResty中正则模式匹配的2种方法详解

    前言 本文介绍 OpenResty 的两种正则模式匹配. 首先需要说明的是,OpenResty 套件中包含了两种语法:一种是主要基于 FFI API 实现的 OpenResty 语法,一种是类原生 Lua 脚本语言的语法. 在本文所介绍的内容中,对应以上两种语法的正则模式匹配分别是 ngx.re.find 和 string.find . 这两种规则起到完全相同的作用:在 subject string 中搜索指定的模式的串,若找到匹配值就返回它的开始位置和结束位置的位数,否则返回两个 nil 空值

  • 极简的Resty服务端和客户端RESTful框架

    如果你还不是很了解restful,或者认为restful只是一种规范不具有实际意义,推荐一篇osc两年前的文章:RESTful API 设计最佳实践  和 Infoq的一篇极其理论的文章  理解本真的REST架构风格 虽然有点老,介绍的也很简单,大家权当了解,restful的更多好处,还请google 拥有jfinal/activejdbc一样的activerecord的简洁设计,使用更简单的restful框架 部分设计也来自jfinal+activejdbc+restx,也希望大家多多支持开源

  • Openresty服务器使用lua脚本写的Hello World简单实例

    Openresty提供了丰富的接口和变量给Lua,开发者可以充分利用Lua语言特性和这些接口进行高效率开发.万事开头难,但是对于编程来说能写出Hello world就已经算是成功一半了. 1.安装openresty 2.配置nginx 复制代码 代码如下: server {      listen 80;      server_name localhost;        #charset koi8-r;        #access_log logs/host.access.log main

  • 基于resty orm的ActiveRecord操作数据指南

    目录 在Resty中ActiveRecord表现为两部分: Model Record 使用方法 1.在application.properties配置jdbc连接,连接池等 2.在AppConfig类中配置ActiveRecordPlugin,来加载连接和映射model 3.编写一个Model类映射数据表,需要继承Model 4.编写一个Resouce来执行某个数据操作 Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实

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

    目录 1.RestFilter 2.Config 3.resources 4.编写一个Resource 一个Resty项目包含的部分(resty-route): 1. RestFilter 像其他web框架一样,Resty也需要一个入口,在web.xml里配置,和常规的Filter区别不大 <filter> <filter-name>RestyFilter</filter-name> <filter-class>cn.dreampie.route.Resty

  • 利用Pycharm + Django搭建一个简单Python Web项目的步骤

    一.Pycharm中安装Django 此教程默认你已安装并配置了Python 3.7.6) 1.File->Settings 二.搭建Django项目 1.File->New Project 2.新窗口打开,会出现以下的文件 简单解释一下这几个文件: **init.py:**这是一个初始化的空文件,一般我们不需要动它. settings.py: 这是一个配置文件,里面有关于语言.时区.安装的app声明等等信息: urls.py: 这个文件里指明了在访问一个页面时要调用的视图啊等的映射,确保在访

  • IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题

    这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBoot项目,看网上的教程一步步的搭建,可是还是出现一堆的问题. 为了让大家以后少走一些弯路,我在这里分享一下我这几天研究的成果,也希望对大家能有所帮助. 这里先介绍一下各种环境的配置信息:idea2016.2.1  jdk1.8.0_31 因为SpringBoot中是内置tomcat的,所以也就不需要额外的tomcat配置了,现在开始讲如何在idea上面搭建SpringBoot web-mvc项目了 步骤一:在IDEA中新建一

  • 基于maven搭建一个ssm的web项目的详细图文教程

    1:使用idea建立一个web项目 2:引入pom依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.

  • 浅谈一个基础的SpringBoot项目该包含哪些

    前言   建立一个全新的项目,或者把旧的庞大的项目,进行拆分成多个项目.在建立新的项目中,经常需要做一些重复的工作,比如说拷贝一下常用的工具类,通用代码等等.所以就可以做一个基础的项目方便使用,在经历新项目的时候,直接在基础项目上进行简单配置就可以开发业务代码了. 基础项目该包含哪些东西. Swagger在线接口文档. CodeGenerator 代码生成器. 统一返回. 通用的分页对象. 常用工具类. 全局异常拦截. 错误枚举. 自定义异常. 多环境配置文件. Maven多环境配置. 日志配置

  • 使用IDEA搭建一个简单的SpringBoot项目超详细过程

    一.创建项目 1.File->new->project: 2.选择"Spring Initializr",点击next:(jdk1.8默认即可) 3.完善项目信息,组名可不做修改,项目名可做修改:最终建的项目名为:test,src->main->java下包名会是:com->example->test:点击next: 4.Web下勾选Spring Web Start,(网上创建springboot项目多是勾选Web选项,而较高版本的Springboo

  • 从零搭建一个vite+vue3+ts规范基础项目(搭建过程问题小结)

    目录 项目初始化 安装router和pinia 安装ESlint eslint的vue规则需要切换 安装prettier 安装stylelint 安装husky 安装commitlint 总结 参考: 最近时间总算是闲了下来,准备着手搭建一个基础模板,为后面新项目准备的,搭建过程中遇到不少问题,现在总结下来给大家使用. 项目初始化 本项目已vite开始,所以按照vite官方的命令开始.这里使用的命令行的方式来搭建基础项目: yarn create vite my-vue-app --templa

  • 基于mpvue搭建微信小程序项目框架的教程详解

    简介: mpvue框架对于从没有接触过小程序又要尝试小程序开发的人员来说,无疑是目前最好的选择.mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序开发 前言: 本文讲述如何搭建完整的小程序项目框架,因为是第一次使用,有不完善的地方请大佬指正. 搭建内容包括: 1.使用scss语法:依赖插件sass-loader .node-sass 2.像vue一样使用路由:依赖插件 mpvue-entry 和 mpvue-router-patch 3.使用

  • 使用webpack5从0到1搭建一个react项目的实现步骤

    前言 在这之前,每开始一个新项目我都是使用现有的脚手架,这非常便于快速地启动一个新项目,而且通用的脚手架通常考虑地更加全面,也有利于项目的稳定开发:不过对于一个小项目,根据需求自己搭建可能会更好,一方面小项目不需要脚手架那么丰富的功能,另一方面可以提高对项目的掌控度以方便后期的扩展. 这篇文章是在实践中总结的,具有实操性,读者可跟着一步步进行搭建,中间我会穿插一些原理,当然因为笔者的能力有限,不会特别深入. 预备知识 熟悉Javascript && HTML && CSS

  • React Native项目框架搭建的一些心得体会

    React Native 是Facebook于2015年4月开源的跨平台移动应用开发框架, 短短的一两年的发展就已经有很多家公司支持并采用此框架来搭建公司的移动端的应用, React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP. 项目框架与项目结构 1. 项目中使用的技术栈 react native.react hook.typescript.immer.tslint.jest等. 都是比较常见的,就不多做介绍了 2. 数据处理

随机推荐