您现在的位置是:首页 > 后台技术 > JavaJava
代码简洁之道-validation
第十三双眼睛2023-08-30【Java】人已围观
简介代码简洁之道-validation
代码简洁之道-validation
beanvalidation官网:https://beanvalidation.org/ 它是接口
hibernatevalidater官网:https://hibernate.org/validator/ 它是最佳实现
使用方法:
1:引入依赖
2:定义一个用来校验的类
3:定义一个校验工具类
编写一个主方法
运行程序,可以看到控制台打印出了提示,id不能为null
常用的注解:
@NotNull:要求属性不能为null
@Null:要求属性必须为null
@NotBlank:要求属性不能为空白字符串
@NotEmpty:要求集合的长度不能为0
@Min:最小值 不校验null
@Max:最大值 不校验null
@Pattern(regexp = ""):属性要满足指定的正则表达式
级联校验:当一个类里面有一个属性也是一个类,这个类也需要被校验,这个时候可以加@Valid注解,就可以进行级联校验了
当同一个类的同一个参数在不同的接口,有的接口种可以为null,但是有的接口不能为null,此时就需要指定groups属性,建一个内部类即可。
快速失败:当对象种有多个属性会校验不通过时,没有必要全部校验一遍,校验道第一个不通过时,直接返回就行,这就是快速失败。这时候就不能用默认的校验器了,
需要进行配置。
运行程序,可以看到结果就只有一个校验结果,不会把所有的属性都校验一遍了。
非bean入参校验
调用validNotBean方法即可校验。
beanvalidation官网:https://beanvalidation.org/ 它是接口
hibernatevalidater官网:https://hibernate.org/validator/ 它是最佳实现
使用方法:
1:引入依赖
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.20.Final</version> </dependency> <!-- tomcat 对el的支持 用于解析message里面的表达式 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> <version>9.0.29</version> </dependency> |
@Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode public class User { @NotNull(message = "id不能为空") private Long id; private String name; } |
package com.xingchen; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class ValidationUtil { private static Validator validator = null; static { validator = Validation.buildDefaultValidatorFactory().getValidator(); } public static List<String> valid(User user) { // 如果没有校验通过,则 集合有校验信息 Set<ConstraintViolation<User>> validateSet = validator.validate(user); List<String> collect = validateSet.stream().map(o -> o.getMessage()) .collect(Collectors.toList()); return collect; } } |
package com.xingchen; import java.util.List; public class App { public static void main(String[] args) { User user = new User(); List<String> stringList = ValidationUtil.valid(user); System.out.println(stringList); } } |
常用的注解:
@NotNull:要求属性不能为null
@Null:要求属性必须为null
@NotBlank:要求属性不能为空白字符串
@NotEmpty:要求集合的长度不能为0
@Min:最小值 不校验null
@Max:最大值 不校验null
@Pattern(regexp = ""):属性要满足指定的正则表达式
级联校验:当一个类里面有一个属性也是一个类,这个类也需要被校验,这个时候可以加@Valid注解,就可以进行级联校验了
当同一个类的同一个参数在不同的接口,有的接口种可以为null,但是有的接口不能为null,此时就需要指定groups属性,建一个内部类即可。
快速失败:当对象种有多个属性会校验不通过时,没有必要全部校验一遍,校验道第一个不通过时,直接返回就行,这就是快速失败。这时候就不能用默认的校验器了,
需要进行配置。
package com.xingchen; import org.hibernate.validator.HibernateValidator; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class ValidationUtil { private static Validator fastFailValidator = null; static { fastFailValidator = Validation.byProvider(HibernateValidator.class) .configure().failFast(true).buildValidatorFactory().getValidator(); } public static List<String> valid(User user) { // 如果没有校验通过,则 集合有校验信息 Set<ConstraintViolation<User>> validateSet = fastFailValidator.validate(user); List<String> collect = validateSet.stream().map(o -> o.getMessage()) .collect(Collectors.toList()); return collect; } } |
非bean入参校验
package com.xingchen; import org.hibernate.validator.HibernateValidator; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.executable.ExecutableValidator; import java.lang.reflect.Method; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class ValidationUtil { private static Validator validator = null; private static Validator fastFailValidator = null; private static ExecutableValidator executableValidator = null; static { validator = Validation.buildDefaultValidatorFactory().getValidator(); fastFailValidator = Validation.byProvider(HibernateValidator.class) .configure().failFast(true).buildValidatorFactory().getValidator(); executableValidator = validator.forExecutables(); } public static List<String> valid(User user) { // 如果没有校验通过,则 集合有校验信息 Set<ConstraintViolation<User>> validateSet = fastFailValidator.validate(user); List<String> collect = validateSet.stream().map(o -> o.getMessage()) .collect(Collectors.toList()); return collect; } public static <T> List<String> validNotBean(T object, Method method, Object[] parameterValues, Class<?>... groups) { Set<ConstraintViolation<T>> set = executableValidator.validateParameters(object, method, parameterValues, groups); List<String> collect = set.stream().map(o -> o.getMessage()) .collect(Collectors.toList()); return collect; } } |
Tags:
很赞哦! ()
下一篇:彻底搞懂字符编码(图文)
相关文章
随机图文
JWT的使用(图文)
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密JSP简要记录
这节主要记录JSP中一些有用的东西JAVA定时备份数据库(图文)
定时备份数据库非常重要,记录一下,以后用的时候随时来找Servlet过滤器
每次要用Servlet中的过滤器的时候,都要取网上找,为了方便,就写在自己的博客中。