当前位置: 代码迷 >> 综合 >> SpringBoot2.0实战(10)整合fluent-validator优雅业务校验
  详细解决方案

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

热度:119   发布时间:2023-09-29 03:03:05.0

相关知识

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 的依赖

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

因为 spring-boot 默认使用 logback 作为日志输出组件,所以在引入的时候需要去掉 fluent-validate 自身的 slf4j

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

注册 Fluent-validator

fluent-validate 与 spring 结合使用 annotation 方式进行参数校验,需要借助于 spring 的 AOP,fluent-validate 提供了处理类 FluentValidateInterceptor,但是 fluent-validate 提供的默认验证回调类 DefaultValidateCallback 对校验失败的情况并没有处理,所以需要自行实现一个

  • 自定义异常回调类

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

  • 注册 IOC

注册 ValidateCallback 及 FluentValidateInterceptor,并且配置一个 AOP 规则

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

  • 全局异常处理

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

编码

  • 添加校验规则

为业务类添加校验规则,此处,并没有添加 fluent-validate 注解,而是保持了原来的 hibernate-validate

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

  • 使用校验

在 Controller 接口的参数前面添加 @FluentValid 注解,替换掉 hibernate-validate 的 @Valid 注解

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

启动类

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

返回结果为

 

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

源码地址

本章源码 : hhttps://github.com/caiyuanzi-song/boot.git

结束语

fluent-validate 可以全方位兼容 hibernate-validate,基于 spring 的 AOP 可以提供基于注解的方法入参校验,同时也可以提供流式编程的工具类业务校验,替代 hibernate-validate 的同时提供了更多扩展性。

扩展

实现自定义校验

  • 实现自定义校验类

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

Validator 接口定义了三个方法,解释如下

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

 

  • 使用自定义校验

添加 sex 属性,使用 @FluentValidate 注解标记使用自定义校验

SpringBoot2.0实战(10)整合fluent-validator优雅业务校验

  相关解决方案