首页

Java基础框架设计之统一校验spring-boot-starter-validation

标签:校验工具,validation注解     发布时间:2023-04-16   

一、前言

基本框架设计之统一验证工具 - 使用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@}
  • ◆ 相关内容