zoukankan      html  css  js  c++  java
  • 自定义注解实现对用户名的存在验证

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

    • 创建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);
      }
      
  • 相关阅读:
    Commonjs,AMD,CMD和UMD的差异
    ajax中datatype的json和jsonp
    bufferd对象详解
    NodeJS中Buffer模块详解
    Vue 定义组件模板的七种方式(一般用单文件组件更好)
    vuejs 单文件组件.vue 文件
    git clone 带用户名密码
    去掉一组整型数组重复的值
    Vue中在组件销毁时清除定时器(setInterval)
    使用Nginx实现反向代理
  • 原文地址:https://www.cnblogs.com/mogong/p/12723959.html
Copyright © 2011-2022 走看看