阜宁网站开发,辽宁建设工程信息网登录入口官方,建设网络良好生态心得体会,建设网站需要哪些编程文章目录 概念基本概念常用校验注解 前置内容整合Hibernate Validator快速入门优雅处理参数校验异常其余注解校验自定义校验注解 参考来源 概念
基本概念
Hibernate Validator 是一个参数校验框架#xff0c;可以非常方便地帮助我们校验应用程序的入参#xff0c;实现了参数… 文章目录 概念基本概念常用校验注解 前置内容整合Hibernate Validator快速入门优雅处理参数校验异常其余注解校验自定义校验注解 参考来源 概念
基本概念
Hibernate Validator 是一个参数校验框架可以非常方便地帮助我们校验应用程序的入参实现了参数校验与业务开发的解耦
常用校验注解
Validated 通常作用于Controller的方法的对象参数上标识该对象需要做参数校验Valid 与Validated注解功能类似但它还可作用于要校验的对象参数的引用类型属性上从而实现嵌套校验即对要校验的对象参数的引用类型属性的属性做参数校验NotNull 非空校验但校验字符串时空字符串可验证通过NotEmpty 非空校验但校验字符串时纯空格字符串可验证通过NotBlank 非空校验校验字符串时纯空格字符串不可验证通过Min 整数最小值校验Max 整数最大值校验Size 字符串、集合、数组长度校验Email 邮箱格式校验Pattern 使用正则表达式校验参数
前置内容
本教程基于Spring Boot快速整合Spring MVC和Mybatis-Plus实现基本的增删改查功能这篇文章请读者先阅读这篇文章
整合Hibernate Validator
快速入门
引入maven依赖 !-- Hibernate Validator参数校验 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency在User类的nickname属性加上NotBlank NotBlank(message 昵称不能为空)private String nickname;添加用户接口使用valid注解 PostMapping(/addUser)ApiOperation(value 添加用户)public boolean addUser(RequestBody Valid User user) {return userService.save(user);}重启并使用Knife4j测试添加用户接口 如下图控制台报了MethodArgumentNotValidException异常并且响应提示也不友好接下来我们需要全局处理一下该异常让前端的提示更加友好 优雅处理参数校验异常
创建参数校验异常提示类
Data
public class ValidErrorInfo {private String field;private String errMsg;
}创建全局异常处理器
RestControllerAdvice
Slf4j
public class GlobalExceptionHandler {/*** 参数校验异常处理** param e* return*/ExceptionHandler(MethodArgumentNotValidException.class) // 指定要处理的异常public ListValidErrorInfo handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {// 打印异常信息log.error(参数校验异常, e);// 封装异常结果ListValidErrorInfo errs new ArrayList();BindingResult bindingResult e.getBindingResult();ListFieldError fieldErrors bindingResult.getFieldErrors();fieldErrors.forEach(err - {ValidErrorInfo validErrorInfo new ValidErrorInfo();validErrorInfo.setField(err.getField());validErrorInfo.setErrMsg(err.getDefaultMessage());errs.add(validErrorInfo);});return errs;}}重启并使用Knife4j测试添加用户接口 响应结果输出了友好提示 其余注解校验
在User类的pwd属性加上Size校验密码长度 Size(min 8, max 16)private String pwd;在User类的email属性加上Email校验邮箱格式 Emailprivate String email;在User类的phone属性加上Pattern校验手机号格式 Pattern(regexp 1([345789])\\d{9})private String phone;重启项目测试 其余注解请自行测试
自定义校验注解
如果现有的校验注解不能满足我们的需求我们可以自定义校验注解比如我们自定义一个性别校验注解
创建一个性别校验器
public class GenderValidValidator implements ConstraintValidatorGenderValid, String {Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {ListString genders Arrays.asList(男, 女);return genders.contains(value);}
}创建一个校验性别的校验注解
Documented
Constraint(validatedBy {GenderValidValidator.class}) // 指定校验器
Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
Retention(RUNTIME)
public interface GenderValid {String message() default 性别录入必须为男/女;Class?[] groups() default {};Class? extends Payload[] payload() default {};
}在User类的gender属性加上 GenderValid校验性别重启项目测试
参考来源
spring 官网hibernate-validator