WireMock 是基于 HTTP 的模拟器。它具备 HTTP 响应存根、请求验证、代理/拦截、记录和回放功能。
当开发人员的开发进度不一致时,可以依赖 WireMock 构建的接口,模拟不同请求与响应,从而避某一模块的开发进度。
Swagger介绍及使用
相信无论是前端还是后端开发,都或多或少地被接口文档折磨过,期望有一个好的接口文档。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
- 接口的文档在线自动生成。
- 功能测试。
SpringBoot 异步处理
在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理,也就是同步处理请求。如果一个请求需要进行IO操作,比如访问数据库、调用第三方服务接口等,那么其所对应的线程将同步地等待IO操作完成,而IO操作是非常慢的,所以此时的线程并不能及时地释放回线程池以供后续使用,在并发量越来越大的情况下,这将带来严重的性能问题。
SpringBoot 文件的上传与下载
文件上传
1 | @Slf4j |
一般情况下,上传的文件不会存放在本地,因此可以将file.transferTo()改成file.getInputStream(),获取文件流,然后写入其他地方中,如OSS中。
SpringBoot 拦截机制
在日常的项目中,我们经常需要对请求进行拦截然后进行一些逻辑操作,拦截的方式有三种,分别是Filter、Interceptor和Aspect。
Spring中的拦截机制,如果出现异常的话,异常的顺序是从里面到外面一步一步的进行处理,如果到了最外层都没有进行处理的话,就会由tomcat容器抛出异常。
SpringBoot 自定义异常类
有的时候,我们需要业务逻辑时抛出自定义异常,这个时候需要自定义业务异常类。
- Exception:受检查的异常,这种异常是强制我们catch或throw的异常。你遇到这种异常必须进行catch或throw,如果不处理,编译器会报错。比如:IOException。
- RuntimeException:运行时异常,这种异常我们不需要处理,完全由虚拟机接管。比如我们常见的NullPointerException,我们在写程序时不会进行catch或throw。
RuntimeException也是继承自Exception的,只是虚拟机对这两种异常进行了区分。
自定义Hibenate Validator
Spring中使用@vaild 注解进行验证传过来的参数校验,然后通过统一异常处理。如@not null、@not blank、@not empty、@Email等等。但是实际业务中可能默认提供的注解不够用,因此需要自定义验证注解。
实现ConstraintValidator接口,它有两个泛型,如上图
- 自定义的注解类,
- 要验证的数据的类型(例如写了String类型的数据,那么这个注解就要放在String类型的字段上才会起作用,若写成Object,那么它可以接收任何数据类型的数据)。
- initialize是初始化方法;
- isValid为验证的逻辑方法,返回true,则验证通过,否则不通过。
在这个实现中,可以用@Autowire注入需要的类。
MyConstraint需要有message()、groups()、payload()三个属性。
Spring cloud微服务安全实战
Java常用的工具类库
总结一些Java常用的工具类库,提高工作效率。
Restful API 简介
Restful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。Restful适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
Restful 特点
- 每一个URI代表1种资源;
- 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
- 通过操作资源的表现形式来操作资源;
- 资源的表现形式是XML或者HTML;
- 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。