前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一个SpringBoot插件-捕获请求并且支持重新发起

第一个SpringBoot插件-捕获请求并且支持重新发起

作者头像
李家酒馆酒保
发布2019-10-25 16:17:39
1.6K0
发布2019-10-25 16:17:39
举报
文章被收录于专栏:李家的小酒馆

SpringBoot 插件入门

简介

  • 公司用的是SpringBoot,api框架用的是swagger-ui,确实用的不错,但是在使用过程中发现一个问题,就是当前端正式调用的时候,如果参数一多的话模拟请求比较麻烦,或者swagger-ui无法模拟出前端的完整请求参数,比如参数放到header里面的,就萌生了一个想法,可以不可以自己写一个类似swagger-ui的插件,通过捕捉访问进来的请求,将其header和param保存下来,下次如果出现问题的话可以通过相同的header和param来再次进行请求.

思考过程

  • 即通过filter捕获指定路径内的请求,然后将其params和headers存放到一个map中,暂时还没有保存数据库,最大容量为100,提供了一个简单的前端页面来进行内容的页面化,页面上可以选择直接用相同的参数发起请求,同时还支持更改其中的参数来发起请求,请求是通过前台页面直接发起.
  • 这个逻辑其实蛮简单的,难点在于如何将一个springboot打成jar包供其他项目引用,如何把页面集成到springBoot中,是否需要进行其他的配置,如何将其他包内的Bean引入到主项目中.
  • 最后还是去参考了一下swagger-ui的源码,Swagger-UI源码

开发过程

  • 首先编写基本的代码,即Filter,数据的保存类,以及对应的前台UI,编写UI的时候有一个难点,就是如何获取到当前项目的地址,最后用下面的代码解决:
代码语言:javascript
复制
   var urlMatches = /(.*)\/reqCatch.html.*/.exec(window.kk);
   this.baseUrl = urlMatches[1] + '/';        
  • 编写完成基本代码以后要考虑如何将其打成jar包给其他工程直接调用,因为用的是SpringBoot的工程,所以说需要将打包的插件更改为maven的打包插件,如下,然后运行maven install命令就可以将其打成一个可以被别的项目引入的jar.
代码语言:javascript
复制
    <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source> 
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
  • 打成jar以后首先要看一下前端页面是否可以访问到,静态资源html等发到static下面,打成jar以后还是直接可以通过原先的网址访问的,不会冲突,到这一步则可以引入jar,可以访问到前台页面,只需要将其Bean添加到主项目中,然后编写一下指定的配置类即可.
  • 如何将bean引入到主项目的Spring环境中,此处是借鉴Swagger-UI的用法,首先编写一个注解,并且运用Import引入一个配置类,然后在配置类上通过@ComponentScan((basePackages= {"com.xx","com.xx"})),直接在主类的配置文件编写这个注解就可以引入对应的Spring环境中
代码语言:javascript
复制
        // 注解类
        @Retention(RetentionPolicy.RUNTIME)
        @Target({java.lang.annotation.ElementType.TYPE})
        @Documented
        @Import({CatchReqConfiguration.class})   // 将这个类交给Spring管理
        public @interface CatchReq {

        }

        // 配置类
        @Configuration
        @ComponentScan(basePackages= {"com.req.controller","com.req.filter"})  // 扫描包
        public class CatchReqConfiguration {
        }
  • 这样就可以将jar包内指定路径的Bean交给Spring管理.
  • 下一步就是编写改插件的配置文件,通俗点就是注册一个Filter,将下面的配置方法放到主项目中,即可以开启插件效果,到此,一个非常简单的Spring Boot的插件就算开发完成.
代码语言:javascript
复制
    @Configuration
    @CatchReq
    public class CatchFilterDemo {
        @Bean
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public FilterRegistrationBean timerFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new CatrhReqFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            return filterRegistrationBean;
        }
    }

发布该jar到私有库

  • 在配置文件中配置发布信息
代码语言:javascript
复制
    <distributionManagement>
        <!--正式版本 -->
        <repository>
            <!-- nexus服务器中用户名:在settings.xml中<server>的id -->
            <id>nexus-releases</id>
            <!-- 这个名称自己定义 -->
            <name>Release repository</name>
            <url>http://192.168.1.241:8088/repository/maven-releases/</url>
        </repository>
        <!--快照 -->
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Snapshots repository</name>
            <url>http://192.168.1.241:8088/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
  • 然后运行 clean deploy

界面演示

代码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot 插件入门
    • 简介
      • 思考过程
        • 开发过程
          • 发布该jar到私有库
            • 界面演示
              • 代码
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档