自定义注解实现对用户名的存在验证

自定义注解实现对用户名的存在验证

  • 创建UserNameExistAnnotation
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD,ElementType.FIELD})
    @Constraint(validatedBy = UserNameExistValidator.class)
    public @interface UserNameExistAnnotation {
      String message() default "出错了!!!";
      Class<?>[] groups() default {};
      Class<?extends Payload>[] payload() default {};
    }
    
  • 创建UserNameExistValidator类
    public class UserNameExistValidator implements ConstraintValidator<UserNameExistAnnotation,String> {
        @Autowired
        private UserMapper userMapper;
    
        public void initialize(UserNameExistAnnotation constraintAnnotation){
            System.out.println("UserNameExistValidator 初始化了");
        }
        public boolean isValid(String value, ConstraintValidatorContext contrxt){
            //查询是否存在该用户名
            User user=userMapper.queryUserByUsername(value);
            if(user!=null){
                System.out.println(ReflectionToStringBuilder.toString(user, ToStringStyle.MULTI_LINE_STYLE));
                return false;
            }
            return true;
        }
    }
    
  • 在UserVo的username字段上添加@UserNameExistAnnotation(message="该用户名已存在")注解
    
    public class UserVo {
    
        private Integer id;
    
        @Length(min=2,max=18,message="请输入2-18位之间的用户名")
        @UserNameExistAnnotation(message="该用户名已存在")
        private String username;
    
        @Pattern(regexp = "[1-9]([0-9]{2,10})",message = "请输入6-16位之间的任意数字字母或者-_")
        private String password;
    
        @Min(value = 12,message = "年龄必须满足18岁以上")
        private Integer age;
    
        @Past(message = "生日必须是过去的日期")
        private Date birthday;
    
        @NotNull
        private String email;
    
        ...
    }
    
    
  • 启动验证
    • 在传入对象的前面添加@Valid注解,添加BindingResult收集错误信息,取消spring对错误URL的自动拦截
    @PostMapping
    public JsonResult insertUser(@Valid @RequestBody UserVo vo,BindingResult bindingResult){
        bindingResult.getAllErrors().forEach(objectError -> {
            FieldError fieldError=(FieldError)objectError;
            System.out.println(fieldError.getField()+" : "+fieldError.getDefaultMessage());
        });
        System.out.println(vo);
        return JsonResult.isOk(vo);
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值