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());
+ }
+}
+```
+