From 789a6e952067f74d828c7b1cc0e5ceaa50c566b6 Mon Sep 17 00:00:00 2001
From: 克 刘 <4345453@qq.com>
Date: Fri, 03 Apr 2020 13:33:44 +0800
Subject: [PATCH] 1、扩展日期数据校验注解 2、扩展kidgrow-code-generator 中Controller.java.vm 保存修改数据校验、Model.java.vm 校验依赖包扩展

---
 kidgrow-business/kidgrow-code-generator/src/main/resources/template/Model.java.vm                                   |    3 
 kidgrow-business/kidgrow-code-generator/src/main/resources/template/Controller.java.vm                              |    6 +
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/KidgrowDateValidator.java |   62 ++++++++++++++++++++
 kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/model/OrderTest.java                                |   37 +++++++++++-
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/BaseConstants.java     |    5 +
 kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/controller/OrderTestController.java                 |    9 ++
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/annotation/DateValidator.java   |   52 +++++++++++++++++
 7 files changed, 168 insertions(+), 6 deletions(-)

diff --git a/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Controller.java.vm b/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Controller.java.vm
index ab90194..d40f2c4 100644
--- a/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Controller.java.vm
+++ b/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Controller.java.vm
@@ -83,8 +83,12 @@
     @ApiOperation(value = "保存")
     @PostMapping
     public ResultBody save(@Valid @RequestBody ${className} ${classname}, BindingResult bindingResult) {
+        List<String> errMsg= new ArrayList<>();
         if (bindingResult.hasErrors()) {
-            return ResultBody.failed().msg(bindingResult.getFieldError().getDefaultMessage());
+            for (ObjectError error : bindingResult.getAllErrors()) {
+                errMsg.add(error.getDefaultMessage());
+            }
+            return ResultBody.failed().msg(errMsg.toString());
         } else {
             boolean v= ${classname}Service.saveOrUpdate(${classname});
             if(v) {
diff --git a/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Model.java.vm b/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Model.java.vm
index a82fd49..992cfbc 100644
--- a/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Model.java.vm
+++ b/kidgrow-business/kidgrow-code-generator/src/main/resources/template/Model.java.vm
@@ -11,6 +11,7 @@
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import org.hibernate.validator.constraints.*;
+import javax.validation.constraints.*;
 #if(${hasBigDecimal})
 import java.math.BigDecimal;
 #end
@@ -38,7 +39,7 @@
     * $column.comments
     */
     #if($column.isNullAble=="NO")
-    @NotBlank(message = "$column.comments不能为空")
+    @NotEmpty(message = "$column.comments不能为空")
     #end
     private $column.attrType $column.attrname;
     #end
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/annotation/DateValidator.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/annotation/DateValidator.java
new file mode 100644
index 0000000..85c607d
--- /dev/null
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/annotation/DateValidator.java
@@ -0,0 +1,52 @@
+package com.kidgrow.common.annotation;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/4/3 11:40 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+
+import com.kidgrow.common.utils.KidgrowDateValidator;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.*;
+
+@Documented
+// 指定该注解可以使用的地方
+@Target(value = {ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+// 指定实际进行校验的校验器,该校验器是自己写的且必须实现ConstraintValidator接口
+@Constraint(validatedBy = KidgrowDateValidator.class)
+public @interface DateValidator {
+    /**
+     * 时间不早于
+     * @return
+     */
+    String minDate() default "";
+
+    /**
+     * 时间不晚于
+     * @return
+     */
+    String maxDate() default "";
+
+    /**
+     * 时间格式定义
+     * @return
+     */
+    String pattern() default "yyyy-MM-dd";
+
+    /**
+     * 没加default给定默认值,使用注解的时候该属性必须赋值,否则报错
+     * @return
+     */
+    String message();
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+}
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/BaseConstants.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/BaseConstants.java
index 31ef395..3ab81b2 100644
--- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/BaseConstants.java
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/BaseConstants.java
@@ -92,5 +92,10 @@
      * 动态数据库名前缀。  每个项目配置死的
      */
     public static final String DATABASE_NAME = "database_name";
+
+    /**
+     * 手机验证正则表达式
+     */
+    public static final String PHONE_REGEXP="/^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/";
 }
 
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/KidgrowDateValidator.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/KidgrowDateValidator.java
new file mode 100644
index 0000000..645d186
--- /dev/null
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/utils/KidgrowDateValidator.java
@@ -0,0 +1,62 @@
+package com.kidgrow.common.utils;
+
+import com.kidgrow.common.annotation.DateValidator;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/4/3 11:41 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+public class KidgrowDateValidator implements ConstraintValidator<DateValidator, Date> {
+    private DateValidator dateValidator;
+
+    @Override
+    public void initialize(DateValidator constraintAnnotation) {
+        this.dateValidator = constraintAnnotation;
+    }
+
+
+    @Override
+    public boolean isValid(Date value, ConstraintValidatorContext context) {
+        String pattern = dateValidator.pattern();
+        SimpleDateFormat df = new SimpleDateFormat(pattern);
+        String myMinDate = dateValidator.minDate();
+        String myMaxDate = dateValidator.maxDate();
+        // 为空可以放过
+        if (value == null){
+            return true;
+        }
+        try {
+            Date maxDate = null;
+            Date minDate = null;
+            if ("".equals(myMinDate)){
+                // 未设置最小时间
+                maxDate = df.parse(dateValidator.maxDate());
+                // compareTo方法, 1:后者大于前者;-1:后者小于前者;0:两个相同
+                return value.compareTo(maxDate) != 1;
+            } else if ("".equals(myMaxDate)){
+                // 未设置最大时间
+                minDate = df.parse(dateValidator.minDate());
+                return value.compareTo(minDate) >= 0;
+            } else {
+                // 设置了最大时间和最小时间
+                maxDate = df.parse(dateValidator.maxDate());
+                minDate = df.parse(dateValidator.minDate());
+                return value.compareTo(maxDate) != 1 && value.compareTo(minDate) >= 0;
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        return false;
+    }
+}
diff --git a/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/controller/OrderTestController.java b/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/controller/OrderTestController.java
index 5e01e75..a19db86 100644
--- a/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/controller/OrderTestController.java
+++ b/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/controller/OrderTestController.java
@@ -12,9 +12,12 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
+import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 
@@ -68,8 +71,12 @@
     @ApiOperation(value = "保存")
     @PostMapping
     public ResultBody save(@Valid @RequestBody OrderTest orderTest, BindingResult bindingResult) {
+        List<String> errMsg= new ArrayList<>();
         if (bindingResult.hasErrors()) {
-            return ResultBody.failed().msg(bindingResult.getFieldError().getDefaultMessage());
+            for (ObjectError error : bindingResult.getAllErrors()) {
+                errMsg.add(error.getDefaultMessage());
+            }
+            return ResultBody.failed().msg(errMsg.toString());
         } else {
             boolean v= orderTestService.saveOrUpdate(orderTest);
             if(v) {
diff --git a/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/model/OrderTest.java b/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/model/OrderTest.java
index 2b0d278..7c4a2ef 100644
--- a/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/model/OrderTest.java
+++ b/kidgrow-demo/kidgrow-demo-order/src/main/java/com/kidgrow/order/model/OrderTest.java
@@ -1,10 +1,19 @@
 package com.kidgrow.order.model;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.kidgrow.common.annotation.DateValidator;
 import com.kidgrow.common.model.SuperModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.hibernate.validator.constraints.*;
+import org.hibernate.validator.constraints.Email;
+import org.hibernate.validator.constraints.Length;
+import org.hibernate.validator.constraints.NotEmpty;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
 
 
 
@@ -24,11 +33,33 @@
     private static final long serialVersionUID = 1L;
 
     //
-    @NotBlank(message = "订单名不能为空")
+    @NotEmpty(message = "订单名不能为空")
     private String name;
     //
 
     @Length(min=5, max=10,message = "用户名长度为5-10")
-    @NotBlank(message = "用户名不能为空")
+    @NotEmpty(message = "用户名不能为空")
     private String namecn;
+
+    @DateValidator(minDate = "2019-01-01",message = "有效期限不能早于2019-01-01")
+    private Date addDate;
+
+
+    @NotEmpty(message = "邮箱不能为空")
+    @Email(message = "邮箱格式不正确")
+    private String mail;
+
+    @NotEmpty(message = "手机号不能为空")
+//    @Pattern(regexp= BaseConstants.PHONE_REGEXP,message = "手机号格式不正确")
+    private String phone;
+
+    @NotNull(message = "年龄不能为空")
+    @Min(value = 0,message = "年龄必须大于等于0")
+    @Max(value = 200,message = "年龄不能大于200")
+    private Integer age;
+
+    @NotNull(message = "性别不能为空")
+    @Min(value = 0,message = "性别,1-男,2-女,0-未知")
+    @Max(value = 2,message = "性别,1-男,2-女,0-未知")
+    private Integer sex;
 }

--
Gitblit v1.8.0