相关知识
FluentValidator是一个工具类库,使用流式(Fluent Interface)调用风格让校验跑起来更优雅,代码更简洁,同时验证器(Validator)可以做到开闭原则,实现最大程度的复用。
github地址:https://github.com/neoremind/fluent-validator
中文使用手册:http://neoremind.com/2016/02/java的业务逻辑验证框架fluent-validator/
特性:
- 验证逻辑与业务逻辑不再耦合,摒弃原来不规范的验证逻辑散落的现象。
- 校验器各司其职,好维护,可复用,可扩展,一个校验器(Validator)只负责某个属性或者对象的校验,可以做到职责单一,易于维护,并且可复用。
- 流式风格(Fluent Interface)调用。
- 使用注解方式验证,可以装饰在属性上,减少硬编码量。
- 支持JSR 303 – Bean Validation标准,也就是说可以兼容 Hibernate Validator。
- Spring良好集成
- 回调给予你充分的自由度,验证过程中发生的错误、异常,验证结果的返回,开发人员都可以定制。
目标
替换 hibernate-validator 为 fluent-validator,实现对入参的校验及异常输出
操作步骤
添加依赖
添加 fluent-validator 的依赖
因为 spring-boot 默认使用 logback 作为日志输出组件,所以在引入的时候需要去掉 fluent-validate 自身的 slf4j
注册 Fluent-validator
fluent-validate 与 spring 结合使用 annotation 方式进行参数校验,需要借助于 spring 的 AOP,fluent-validate 提供了处理类 FluentValidateInterceptor,但是 fluent-validate 提供的默认验证回调类 DefaultValidateCallback 对校验失败的情况并没有处理,所以需要自行实现一个
- 自定义异常回调类
- 注册 IOC
注册 ValidateCallback 及 FluentValidateInterceptor,并且配置一个 AOP 规则
- 全局异常处理
编码
- 添加校验规则
为业务类添加校验规则,此处,并没有添加 fluent-validate 注解,而是保持了原来的 hibernate-validate
- 使用校验
在 Controller 接口的参数前面添加 @FluentValid 注解,替换掉 hibernate-validate 的 @Valid 注解
启动类
返回结果为
源码地址
本章源码 : hhttps://github.com/caiyuanzi-song/boot.git
结束语
fluent-validate 可以全方位兼容 hibernate-validate,基于 spring 的 AOP 可以提供基于注解的方法入参校验,同时也可以提供流式编程的工具类业务校验,替代 hibernate-validate 的同时提供了更多扩展性。
扩展
实现自定义校验
- 实现自定义校验类
Validator 接口定义了三个方法,解释如下
- 使用自定义校验
添加 sex 属性,使用 @FluentValidate 注解标记使用自定义校验