JSR303创建自定义验证

今天博主来以一个简单的例子来讲解一下:通过JSR303来创建自定义的验证(SpringBoot+Mybatis环境)


1.我们创建一个名为LoginVo的JavaBean,从下面可以看出创建的自定的验证为@IsMobile

package com.imooc.miaosha.vo;

import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

import com.imooc.miaosha.valiadator.IsMobile;

public class LoginVo {

	//用户登录的pojo
	//使用SpringBoot的注解来限制变量的格式
	@NotNull
	@IsMobile //自定义注解 检查mobile格式是否正确
    private String mobile;
	
	@NotNull //不为空
	@Length(min=32) //最小的长度为32位
	private String password;
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//再生成其toString()方法
	@Override
	public String toString() {
		return "LoginVo [mobile=" + mobile + ", password=" + password + "]";
	}
    
}

2.接下来我们要对新创建的注解写一个同名的类了:

package com.imooc.miaosha.valiadator;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValiadator.class})  
public @interface IsMobile {
    
	//true:参数必须有,进行格式校验      false:参数可以为空,不为空时也要进行进行格式校验
	boolean requried() default true; //这个可有可无
        //提示信息
	String message() default "手机号码格式错误";//通过注解后输出的信息,可以自定义
	Class<?>[] groups() default{};
	Class<?extends Payload>[] payload() default{};
}

3.创建完IsMobile类,我们可以从IsMobile类中发现代码

@Constraint(validatedBy = {IsMobileValiadator.class})  

其中有个

IsMobileValiadator.class

这个类才是注解的真正的实现类(处理类):

对于这个类具体怎么处理得看你想要这个注解干什么活了,但需要注意的是:

这个类必须实现ConstraintValidtor接口,其中的两个参数在下面的代码已经给出相关解释了

package com.imooc.miaosha.valiadator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import com.alibaba.druid.util.StringUtils;
import com.imooc.miaosha.util.ValiadatorUtils;

public class IsMobileValiadator implements ConstraintValidator<IsMobile, String> {
    /**注意的是:ConstraintValidator<IsMobile, String>
     * 第一个参数就是自定义注解的名字 第二个就是注解修饰的字段类型
     */
	
	//申明一个required 默认的值为false
	public boolean required = false;
	
	
	public void initialize(IsMobile constraintAnnotation) {
		
	    //初始化:拿到IsMobile中的required中的值
		required = constraintAnnotation.requried();
		
	}

	public boolean isValid(String value, ConstraintValidatorContext context) {
        //判断value是否必须 required为true则为必须 反之不是必须的
		if(required)
		{
			//必须的
			return ValiadatorUtils.isMoible(value);
		}
		else
		{
			//判断值是否为空
			if(StringUtils.isEmpty(value))
			{
				//为空的时候返回true
				return true;
			}
			//否则进行格式校验
			return ValiadatorUtils.isMoible(value);
			
		}
		
	}

}
好了,创建一个简单的JSR303注解就完成了,三步就搞定了!

猜你喜欢

转载自blog.csdn.net/qq_32575047/article/details/80794654