摘要:校验器可以通过对象报告校验失败的信息接口定义示例如下,可以使用等工具测试用户名不能为空常用注解也可以自定义注解及其校验规则获取并初始化注解信息设置自定义校验规则人的姓名不能为空参考
Java后端常用的校验框架 Apache commons-validatorQ: 为什么后端需要校验,只交给前端校验行不行
A: 前后端都需要校验
后端校验防止请求过来的非法数据,对后端进行破坏
http://commons.apache.org/ 这个地址apache提供了常用的工具类,包括校验框架
提供了大量的校验器,如时间、数值、正则表达式、邮箱、URL等待
以IntegerValidator为例
IntegerValidator integerValidator = new IntegerValidator(); Integer value = integerValidator.validate("10"); System.out.println(value); value = integerValidator.validate("G"); System.out.println(value);
/** *Validate/convert an
Integer
using the default *Locale
. * * @param value The value validation is being performed on. * @return The parsedInteger
if valid ornull
* if invalid. */ public Integer validate(String value) { return (Integer)parse(value, (String)null, (Locale)null); }
在校验传入的参数时,当能够解析成Integer类型就返回这个数字,如果不能就返回null
其它数值类型校验类似
Spring ValidatorSpring框架提供的用于校验对象的Validator接口,在校验过程中与Errors对象配合。校验器可以通过Errors对象报告校验失败的信息
org.springframework.validation.Validator接口定义
public interface Validator { /** * Can this {@link Validator} {@link #validate(Object, Errors) validate} * instances of the supplied {@code clazz}? *This method is typically implemented like so: *
return Foo.class.isAssignableFrom(clazz);* (Where {@code Foo} is the class (or superclass) of the actual * object instance that is to be {@link #validate(Object, Errors) validated}.) * @param clazz the {@link Class} that this {@link Validator} is * being asked if it can {@link #validate(Object, Errors) validate} * @return {@code true} if this {@link Validator} can indeed * {@link #validate(Object, Errors) validate} instances of the * supplied {@code clazz} */ boolean supports(Class> clazz); /** * Validate the supplied {@code target} object, which must be * of a {@link Class} for which the {@link #supports(Class)} method * typically has (or would) return {@code true}. *The supplied {@link Errors errors} instance can be used to report * any resulting validation errors. * @param target the object that is to be validated (can be {@code null}) * @param errors contextual state about the validation process (never {@code null}) * @see ValidationUtils */ void validate(Object target, Errors errors);
示例如下,可以使用POSTMAN等工具测试
package com.adagio.domain; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; public class Person { @NotNull private String name; @Min(0) @Max(150) private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.adagio.validator; import org.springframework.util.StringUtils; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import com.adagio.domain.Person; public class PersonValidator implements Validator { @Override public boolean supports(Class> clazz) { return Person.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { Person person = Person.class.cast(target); String name = person.getName(); if(!StringUtils.hasLength(name)){ errors.reject("person.name.not.null", "用户名不能为空"); } } }
package com.adagio.controller; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import com.adagio.domain.Person; @Controller public class PersonController { @PostMapping("/person/save") public Person save(@Valid @RequestBody Person person){ return person; } }Bean Validation 1.0(JSR-303)
常用注解:@Valid、@NotNull、@Null、@Size、@Min、@Max
也可以自定义注解及其校验规则
package com.adagio.validator; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; @Target({METHOD, FIELD}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = {PersonNameConstraintValidator.class}) public @interface PersonName { String message() default "{person.name.not.null}"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; }
package com.adagio.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class PersonNameConstraintValidator implements ConstraintValidator{ /** * 获取并初始化注解信息 */ @Override public void initialize(PersonName constraintAnnotation) { } /** * 设置自定义校验规则 */ @Override public boolean isValid(String value, ConstraintValidatorContext context) { return false; } }
person.name.not.null=人的姓名不能为空
参考:https://segmentfault.com/l/15...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67848.html
摘要:表达式语言依赖关系提供对变量插值的支持,允许在违规消息中使用表达式。这是当相应属性的值未通过验证时通常会呈现的消息。任何违反对象中定义的约束的行为都将作为返回。案例结论本文重点介绍了标准的简单传递,并使用注释和说明了验证的基础知识。 案例概述 在这本文中,我们将介绍使用标准框架验证Java bean的基础知识 - JSR 380,也称为Bean Validation 2.0。 当然,验...
摘要:下面以某个短信接口为例讲解。例如,上面的短信模板的信息应为欧阳科技登录验证码,如非本人操作,请忽略此短信。,为占位符,是你的短信验证码。验证码通知短信提交请求创建验证码验证码上面这些是主要的类,还有其他的类在文章末尾给出源代码。 手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用,这篇文章就以一个短信接口的实例,来讲解一下怎么使用短信接口...
摘要:我们平时开发时经常会遇到需要图片验证码,基础的验证码包括了数字字母甚至可能有汉字。下面我给出一个简单的工具类。验证码生成器图片的宽度。 我们平时开发时经常会遇到需要图片验证码,基础的验证码包括了数字、字母、甚至可能有汉字。下面我给出一个简单的工具类。 package com..ankang.tony.util; import java.awt.Color; import java....
摘要:的身份验证器一般也是用于登录进行两步验证,和苹果的两步验证是同样的道理。只不过的身份验证器用得更多更广泛,如的两步验证都是基于身份验证器。使用我们来看下上的使用身份验证器开启两步验证的应用。 两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的。 Google 的身份验证器一般也是用...
摘要:类加载器类加载器执行的操作就是上述加载阶段做的事,通过一个类的全限定名来获取定义这个类的二进制字节流,类加载器可以分为下列三种。应用程序类加载器,也称为系统类加载器。 类加载流程: showImg(https://segmentfault.com/img/bV8SRP?w=1152&h=388);从上面这幅图可以看出一个类从加载到卸载有7个阶段,其中验证、准备和解析这三个步骤统称为连接...
摘要:验证验证阶段的主要目的是为了确保文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。不同的虚拟机对类验证的实现可能会有所不同,但大致都会完成以下四个阶段的验证文件格式的验证元数据的验证字节码验证和符号引用验证。 原文地址 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,Thisis ...
阅读 1827·2021-11-24 09:39
阅读 2031·2021-09-22 15:50
阅读 1693·2021-09-22 14:57
阅读 667·2021-07-28 00:13
阅读 1008·2019-08-30 15:54
阅读 2329·2019-08-30 15:52
阅读 2578·2019-08-30 13:07
阅读 3728·2019-08-30 11:27