From d6d103dcb5502c3d6ad98cdb8b8465f830894ebe Mon Sep 17 00:00:00 2001 From: chengqiang Date: Thu, 5 Nov 2020 15:59:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?java=20bean=E6=A0=A1=E9=AA=8C=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hutool-extra/pom.xml | 15 ++++ .../validation/BeanValidationResult.java | 66 +++++++++++++++ .../extra/validation/BeanValidationUtil.java | 84 +++++++++++++++++++ .../hutool/extra/validation/package-info.java | 6 ++ .../validation/BeanValidatorUtilTest.java | 51 +++++++++++ 5 files changed, 222 insertions(+) create mode 100644 hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java create mode 100644 hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java create mode 100644 hutool-extra/src/main/java/cn/hutool/extra/validation/package-info.java create mode 100644 hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index f732a9b95..90234912f 100644 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -258,5 +258,20 @@ 1.2.3 test + + org.hibernate + hibernate-validator + 6.0.12.Final + + + javax.el + javax.el-api + 3.0.1-b01 + + + org.glassfish.web + javax.el + 2.2.6 + diff --git a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java new file mode 100644 index 000000000..c5354c8ed --- /dev/null +++ b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java @@ -0,0 +1,66 @@ +package cn.hutool.extra.validation; + +import java.util.ArrayList; +import java.util.List; + +/** + * bean 校验结果 + * + * @author chengqiang + */ + +public class BeanValidationResult { + + /** + * 校验是否成功 + */ + private Boolean success = Boolean.TRUE; + + /** + * 错误消息 + */ + private List errorMessages = new ArrayList<>(); + + public Boolean getSuccess() { + return success; + } + + public void setSuccess(Boolean success) { + this.success = success; + } + + public List getErrorMessages() { + return errorMessages; + } + + public void setErrorMessages(List errorMessages) { + this.errorMessages = errorMessages; + } + + public static class ErrorMessage { + /** + * 属性字段名称 + */ + private String propertyName; + /** + * 错误信息 + */ + private String message; + + public String getPropertyName() { + return propertyName; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + } +} diff --git a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java new file mode 100644 index 000000000..5dd452844 --- /dev/null +++ b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java @@ -0,0 +1,84 @@ +package cn.hutool.extra.validation; + +import cn.hutool.extra.validation.BeanValidationResult.ErrorMessage; +import org.hibernate.validator.HibernateValidator; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import java.util.Set; + + +/** + * java bean 校验工具类 + * + * @author chengqiang + */ +public class BeanValidationUtil { + + private static final Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator(); + + /** + * 校验对象 + * + * @param bean bean + * @param groups 校验组 + * @return {@link Set} + */ + public static Set> validate(T bean, Class... groups) { + return validator.validate(bean, groups); + } + + /** + * 校验对象 + * + * @param bean bean + * @param groups 校验组 + * @return {@link BeanValidationResult} + */ + public static BeanValidationResult warpValidate(T bean, Class... groups) { + return warpBeanValidationResult(validate(bean, groups)); + } + + /** + * 校验bean的某一个属性 + * + * @param bean bean + * @param propertyName 属性名称 + * @return {@link Set} + */ + public static Set> validateProperty(T bean, String propertyName, Class... groups) { + return validator.validateProperty(bean, propertyName, groups); + } + + + /** + * 校验bean的某一个属性 + * + * @param bean bean + * @param propertyName 属性名称 + * @return {@link BeanValidationResult} + */ + public static BeanValidationResult warpValidateProperty(T bean, String propertyName, Class... groups) { + return warpBeanValidationResult(validateProperty(bean, propertyName, groups)); + } + + /** + * 包装校验结果 + * + * @param constraintViolations 校验结果集 + * @return {@link BeanValidationResult} + */ + private static BeanValidationResult warpBeanValidationResult(Set> constraintViolations) { + BeanValidationResult result = new BeanValidationResult(); + for (ConstraintViolation constraintViolation : constraintViolations) { + result.setSuccess(Boolean.FALSE); + ErrorMessage errorMessage = new ErrorMessage(); + errorMessage.setPropertyName(constraintViolation.getPropertyPath().toString()); + errorMessage.setMessage(constraintViolation.getMessage()); + result.getErrorMessages().add(errorMessage); + } + return result; + } + +} diff --git a/hutool-extra/src/main/java/cn/hutool/extra/validation/package-info.java b/hutool-extra/src/main/java/cn/hutool/extra/validation/package-info.java new file mode 100644 index 000000000..286124201 --- /dev/null +++ b/hutool-extra/src/main/java/cn/hutool/extra/validation/package-info.java @@ -0,0 +1,6 @@ +/** + * java bean 校验工具 + * + * @author chengqiang + */ +package cn.hutool.extra.validation; \ No newline at end of file diff --git a/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java new file mode 100644 index 000000000..6da6951f0 --- /dev/null +++ b/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java @@ -0,0 +1,51 @@ +package cn.hutool.extra.validation; + +import cn.hutool.core.lang.Assert; +import org.junit.Test; + +import javax.validation.constraints.NotBlank; + +/** + * java bean 校验工具类单元测试 + * + * @author chengqiang + */ +public class BeanValidatorUtilTest { + + public static class TestClass { + + @NotBlank(message = "姓名不能为空") + private String name; + + @NotBlank(message = "地址不能为空") + private String address; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + } + + @Test + public void beanValidatorTest() { + BeanValidationResult result = BeanValidationUtil.warpValidate(new TestClass()); + Assert.isTrue(result.getSuccess()); + } + + @Test + public void propertyValidatorTest() { + BeanValidationResult result = BeanValidationUtil.warpValidateProperty(new TestClass(), "name"); + Assert.isTrue(result.getSuccess()); + } +} From e9a361769005a357ce5d5550565de99dca5e0a99 Mon Sep 17 00:00:00 2001 From: chengqiang Date: Thu, 5 Nov 2020 16:36:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/BeanValidationResult.java | 84 ++++++------- .../extra/validation/BeanValidationUtil.java | 117 +++++++++--------- .../validation/BeanValidatorUtilTest.java | 56 ++++----- 3 files changed, 128 insertions(+), 129 deletions(-) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java index c5354c8ed..674da5149 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationResult.java @@ -11,56 +11,56 @@ import java.util.List; public class BeanValidationResult { - /** - * 校验是否成功 - */ - private Boolean success = Boolean.TRUE; + /** + * 校验是否成功 + */ + private Boolean success = Boolean.TRUE; - /** - * 错误消息 - */ - private List errorMessages = new ArrayList<>(); + /** + * 错误消息 + */ + private List errorMessages = new ArrayList<>(); - public Boolean getSuccess() { - return success; - } + public Boolean getSuccess() { + return success; + } - public void setSuccess(Boolean success) { - this.success = success; - } + public void setSuccess(Boolean success) { + this.success = success; + } - public List getErrorMessages() { - return errorMessages; - } + public List getErrorMessages() { + return errorMessages; + } - public void setErrorMessages(List errorMessages) { - this.errorMessages = errorMessages; - } + public void setErrorMessages(List errorMessages) { + this.errorMessages = errorMessages; + } - public static class ErrorMessage { - /** - * 属性字段名称 - */ - private String propertyName; - /** - * 错误信息 - */ - private String message; + public static class ErrorMessage { + /** + * 属性字段名称 + */ + private String propertyName; + /** + * 错误信息 + */ + private String message; - public String getPropertyName() { - return propertyName; - } + public String getPropertyName() { + return propertyName; + } - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } - public String getMessage() { - return message; - } + public String getMessage() { + return message; + } - public void setMessage(String message) { - this.message = message; - } - } + public void setMessage(String message) { + this.message = message; + } + } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java index 5dd452844..d35abf93b 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/validation/BeanValidationUtil.java @@ -16,69 +16,68 @@ import java.util.Set; */ public class BeanValidationUtil { - private static final Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator(); + private static final Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator(); - /** - * 校验对象 - * - * @param bean bean - * @param groups 校验组 - * @return {@link Set} - */ - public static Set> validate(T bean, Class... groups) { - return validator.validate(bean, groups); - } + /** + * 校验对象 + * + * @param bean bean + * @param groups 校验组 + * @return {@link Set} + */ + public static Set> validate(T bean, Class... groups) { + return validator.validate(bean, groups); + } - /** - * 校验对象 - * - * @param bean bean - * @param groups 校验组 - * @return {@link BeanValidationResult} - */ - public static BeanValidationResult warpValidate(T bean, Class... groups) { - return warpBeanValidationResult(validate(bean, groups)); - } + /** + * 校验对象 + * + * @param bean bean + * @param groups 校验组 + * @return {@link BeanValidationResult} + */ + public static BeanValidationResult warpValidate(T bean, Class... groups) { + return warpBeanValidationResult(validate(bean, groups)); + } - /** - * 校验bean的某一个属性 - * - * @param bean bean - * @param propertyName 属性名称 - * @return {@link Set} - */ - public static Set> validateProperty(T bean, String propertyName, Class... groups) { - return validator.validateProperty(bean, propertyName, groups); - } + /** + * 校验bean的某一个属性 + * + * @param bean bean + * @param propertyName 属性名称 + * @return {@link Set} + */ + public static Set> validateProperty(T bean, String propertyName, Class... groups) { + return validator.validateProperty(bean, propertyName, groups); + } + /** + * 校验bean的某一个属性 + * + * @param bean bean + * @param propertyName 属性名称 + * @return {@link BeanValidationResult} + */ + public static BeanValidationResult warpValidateProperty(T bean, String propertyName, Class... groups) { + return warpBeanValidationResult(validateProperty(bean, propertyName, groups)); + } - /** - * 校验bean的某一个属性 - * - * @param bean bean - * @param propertyName 属性名称 - * @return {@link BeanValidationResult} - */ - public static BeanValidationResult warpValidateProperty(T bean, String propertyName, Class... groups) { - return warpBeanValidationResult(validateProperty(bean, propertyName, groups)); - } - - /** - * 包装校验结果 - * - * @param constraintViolations 校验结果集 - * @return {@link BeanValidationResult} - */ - private static BeanValidationResult warpBeanValidationResult(Set> constraintViolations) { - BeanValidationResult result = new BeanValidationResult(); - for (ConstraintViolation constraintViolation : constraintViolations) { - result.setSuccess(Boolean.FALSE); - ErrorMessage errorMessage = new ErrorMessage(); - errorMessage.setPropertyName(constraintViolation.getPropertyPath().toString()); - errorMessage.setMessage(constraintViolation.getMessage()); - result.getErrorMessages().add(errorMessage); - } - return result; - } + /** + * 包装校验结果 + * + * @param constraintViolations 校验结果集 + * @return {@link BeanValidationResult} + */ + private static BeanValidationResult warpBeanValidationResult(Set> constraintViolations) { + BeanValidationResult result = new BeanValidationResult(); + for (ConstraintViolation constraintViolation : constraintViolations) { + result.setSuccess(Boolean.FALSE); + ErrorMessage errorMessage = new ErrorMessage(); + errorMessage.setPropertyName(constraintViolation.getPropertyPath().toString()); + errorMessage.setMessage(constraintViolation.getMessage()); + result.getErrorMessages().add(errorMessage); + } + return result; + } } diff --git a/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java index 6da6951f0..b8a3cfdd0 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/validation/BeanValidatorUtilTest.java @@ -12,40 +12,40 @@ import javax.validation.constraints.NotBlank; */ public class BeanValidatorUtilTest { - public static class TestClass { + public static class TestClass { - @NotBlank(message = "姓名不能为空") - private String name; + @NotBlank(message = "姓名不能为空") + private String name; - @NotBlank(message = "地址不能为空") - private String address; + @NotBlank(message = "地址不能为空") + private String address; - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public String getAddress() { - return address; - } + public String getAddress() { + return address; + } - public void setAddress(String address) { - this.address = address; - } - } + public void setAddress(String address) { + this.address = address; + } + } - @Test - public void beanValidatorTest() { - BeanValidationResult result = BeanValidationUtil.warpValidate(new TestClass()); - Assert.isTrue(result.getSuccess()); - } + @Test + public void beanValidatorTest() { + BeanValidationResult result = BeanValidationUtil.warpValidate(new TestClass()); + Assert.isTrue(result.getSuccess()); + } - @Test - public void propertyValidatorTest() { - BeanValidationResult result = BeanValidationUtil.warpValidateProperty(new TestClass(), "name"); - Assert.isTrue(result.getSuccess()); - } + @Test + public void propertyValidatorTest() { + BeanValidationResult result = BeanValidationUtil.warpValidateProperty(new TestClass(), "name"); + Assert.isTrue(result.getSuccess()); + } }