好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

一个Resty项目包含的部分(resty-route):

1. RestFilter

像其他web框架一样,Resty也需要一个入口,在web.xml里配置,和常规的Filter区别不大

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

< 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类,参考如下,根据自己的实际情况选择配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

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 系统全局的配置信息

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#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类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

/**

  * 通过@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

查看更多关于搭建一个基础的Resty项目框架的详细内容...

  阅读:15次