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