From 4fdc3d26f1bb3f5f920d95c55efc0799adc6ff08 Mon Sep 17 00:00:00 2001 From: LGH <1242479791@qq.com> Date: Fri, 24 Apr 2020 10:06:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BB=9F=E4=B8=80=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/统一验证.md | 139 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 doc/统一验证.md diff --git a/doc/统一验证.md b/doc/统一验证.md new file mode 100644 index 0000000..87524b0 --- /dev/null +++ b/doc/统一验证.md @@ -0,0 +1,139 @@ +我们后台使用`spring` 为我们提供好的统一校验的工具`spring-boot-starter-validation`对请求进行校验。 + +```xml + + org.springframework.boot + spring-boot-starter-validation + +``` + +这里通过注解封装了几种常用的校验 + +- `@NotNull` 不能为null +- `@NotEmpty` 不能为null、空字符串、空集合 +- `@NotBlank` 不能为null、空字符串、纯空格的字符串 +- `@Min` 数字最小值不能小于x +- `@Max` 数字最大值不能大于x +- `@Email` 字符串为邮件格式 +- `@Max` 数字最大值不能大于x +- `@Size` 字符串长度最小为x、集合长度最小为x +- `@Pattern` 正则表达式 + + + +我们以`SysUser`为例,看看怎么使用 + +```java +public class SysUser implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + * + */ + @TableId + private Long userId; + + /** + * 用户名 + */ + @NotBlank(message="用户名不能为空") + @Size(min = 2,max = 20,message = "用户名长度要在2-20之间") + private String username; + + /** + * 密码 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private String password; + + /** + * 邮箱 + */ + @NotBlank(message="邮箱不能为空") + @Email(message="邮箱格式不正确") + private String email; + + /** + * 手机号 + */ + @Pattern(regexp="0?1[0-9]{10}",message = "请输入正确的手机号") + private String mobile; + + /** + * 状态 0:禁用 1:正常 + */ + private Integer status; + + /** + * 用户所在店铺id + */ + private Long shopId; + + /** + * 角色ID列表 + */ + @TableField(exist=false) + private List roleIdList; + + /** + * 创建时间 + */ + private Date createTime; + +} +``` + + + +我们在Controller层使用该bean,并使用`@Valid`注解,使校验的注解生效,如`SysUserController` : + +```java +@RestController +@RequestMapping("/sys/user") +public class SysUserController { + /** + * 保存用户 + */ + @SysLog("保存用户") + @PostMapping + @PreAuthorize("@pms.hasPermission('sys:user:save')") + public ResponseEntity save(@Valid @RequestBody SysUser user){ + String username = user.getUsername(); + SysUser dbUser = sysUserService.getOne(new LambdaQueryWrapper() + .eq(SysUser::getUsername, username)); + if (dbUser!=null) { + return ResponseEntity.badRequest().body("该用户已存在"); + } + user.setShopId(SecurityUtils.getSysUser().getShopId()); + user.setPassword(passwordEncoder.encode(user.getPassword())); + sysUserService.saveUserAndUserRole(user); + return ResponseEntity.ok().build(); + } +} +``` + + + +并且在`DefaultExceptionHandlerConfig` 拦截由`@Valid` 触发的异常信息并返回: + +```java +@Controller +@RestControllerAdvice +public class DefaultExceptionHandlerConfig { + + @ExceptionHandler(BindException.class) + public ResponseEntity bindExceptionHandler(BindException e){ + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage()); + + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){ + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage()); + } +} +``` +