一、前言
基本框架设计之统一验证工具 - 使用spring的'spring-boot-starter-validation'对请求进行校验。
二、使用说明
1)依赖配置
<dependency>@b@ <groupId>org.springframework.boot</groupId>@b@ <artifactId>spring-boot-starter-validation</artifactId>@b@</dependency>
2)注解
- '@NotNull' 不能为null@b@- '@NotEmpty' 不能为null、空字符串、空集合@b@- '@NotBlank' 不能为null、空字符串、纯空格的字符串@b@- '@Min' 数字最小值不能小于x@b@- '@Max' 数字最大值不能大于x@b@- '@Email' 字符串为邮件格式@b@- '@Max' 数字最大值不能大于x@b@- '@Size' 字符串长度最小为x、集合长度最小为x@b@- '@Pattern' 正则表达式
3)代码示例 - Controller层使用该bean,并使用'@Valid'注解,使校验的注解生效,如
@RestController@b@@RequestMapping("/sys/user")@b@public class SysUserController {@b@ /**@b@ * 保存用户@b@ */@b@ @SysLog("保存用户")@b@ @PostMapping@b@ @PreAuthorize("@pms.hasPermission('sys:user:save')")@b@ public ServerResponseEntity<String> save(@Valid @RequestBody SysUser user){@b@ String username = user.getUsername();@b@ SysUser dbUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>()@b@ .eq(SysUser::getUsername, username));@b@ if (dbUser!=null) {@b@ return ServerResponseEntity.showFailMsg("该用户已存在");@b@ }@b@ user.setShopId(SecurityUtils.getSysUser().getShopId());@b@ user.setPassword(passwordEncoder.encode(user.getPassword()));@b@ sysUserService.saveUserAndUserRole(user);@b@ return ServerResponseEntity.success();@b@ }@b@}
并且在'DefaultExceptionHandlerConfig' 拦截由'@Valid' 触发的异常信息并返回
@RestController@b@@RestControllerAdvice@b@public class DefaultExceptionHandlerConfig {@b@@b@ @ExceptionHandler(BindException.class)@b@ public ServerResponseEntity<String> bindExceptionHandler(BindException e){@b@ e.printStackTrace();@b@ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());@b@@b@ }@b@@b@ @ExceptionHandler(MethodArgumentNotValidException.class)@b@ public ServerResponseEntity<String> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){@b@ e.printStackTrace();@b@ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());@b@ }@b@}