第一个SpringBoot插件-捕获请求并且支持重新发起
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的时候有一个难点,就是如何获取到当前项目的地址,最后用下面的代码解决:
var urlMatches = /(.*)\/reqCatch.html.*/.exec(window.location.href);
this.baseUrl = urlMatches[1] + '/';
- 编写完成基本代码以后要考虑如何将其打成jar包给其他工程直接调用,因为用的是SpringBoot的工程,所以说需要将打包的插件更改为maven的打包插件,如下,然后运行maven install命令就可以将其打成一个可以被别的项目引入的jar.
<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环境中
// 注解类
@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的插件就算开发完成.
@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到私有库
- 在配置文件中配置发布信息
<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
界面演示
代码
第一个SpringBoot插件-捕获请求并且支持重新发起的更多相关文章
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- SpringBoot多跨域请求的支持(JSONP)
在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBod ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
{Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) Django基础七之 ...
- 第一个SpringBoot程序
第一个SpringBoot程序 例子来自慕课网廖师兄的免费课程 2小时学会SpringBoot Spring Boot进阶之Web进阶 使用IDEA新建工程,选择Spring Initializr,勾 ...
- 整理代码,将一些曾经用过的功能整合进一个spring-boot
一 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 功能 1. ...
- springboot学习笔记:2.搭建你的第一个springboot应用
1.开发环境 (推荐):jdk1.8+Maven(3.2+)+Intellij IDEA+windows10; 说明: jdk:springboot官方说的很明确,到目前版本的springboot(1 ...
- 分享一个springboot脚手架
项目介绍 在我们开发项目的时候各个项目之间总有一些可共用的代码或者配置,如果我们每新建一个项目就把代码复制粘贴再修改就显得很没有必要.于是我就做了一个 poseidon-boot-starter 该项 ...
- Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)
前言 我们知道在Web APi中捕获原始请求的内容是肯定是很容易的,但是这句话并不是完全正确,前面我们是不是讨论过,在Web APi中,如果对于字符串发出非Get请求我们则会出错,为何?因为Web A ...
- springboot:快速构建一个springboot项目
前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...
随机推荐
- (3)mysql表和字段的操作
创建表 create table name( id int, student ) ); 查看表结构 ****常用**** describe 表名; 修改表名 老表 rename 新表 ALTER TA ...
- iOS扩展Extension之Today
1.简介 扩展(Extension)是iOS 8中引入的一个新特性.扩展让app之间的数据交互成为可能.在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据.而在 ...
- 51nod-1130-N的阶乘的长度V2(斯特林近似)-套斯特林公式
输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. 输入 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 1000) 第2 - T + 1行:每 ...
- Spring IOC基础回顾 — 组件扫描和装配
目录 注解形式配置应用IOC 1. 组件自动扫描 2. 组件依赖:为bean添加注解,实现自动注入 3. Spring IOC应用小结 注解形式配置应用IOC 在类定义.方法定义.成员变量定义前使用, ...
- Static 关键字的 5 种用法,你会几种?
); System.out.println(Thread.currentThread().getName() ...
- 一次完整的HTTP请求与响应涉及哪些知识?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:Ruheng 地址:http://www.jianshu.com/p/c1d6a294d3c0 本文以HTTP请求和响 ...
- <爬虫>黑板爬虫闯关02
import requests from lxml import etree ''' 黑板爬虫闯关02 网址:http://www.heibanke.com/lesson/crawler_ex01/ ...
- mysql主从跳过错误
mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 跳过错误有两种方式: 1.跳过指定数量的事务 mysql>stop slave; m ...
- data方法也是模型类的连贯操作方法之一,
data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值. 写操作 通常情况下我们都是通过create方法或者赋值的方式生成数据对象,然后写入数据库,例如: $Model = D(' ...
- 「题解」:[线性代数]:relays 奶牛接力跑
问题: relays 奶牛接力跑 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼 ...
