通过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注解就完成了,三步就搞定了!