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