Lombok+安全框架

一、lombok

 * cleanup
 * 资源关闭 文件流操作的初始化可做注解

 * Data
 * 大而全的注解 包含 Getter Setter ToString EqualsAndHashCode

 * EqualsAndHashCode
 * 生成Equals方法和HashCode方法

 * nonnull
 * 生成非空检查

getter
@Getter(
            lazy = true,
            value = AccessLevel.PRIVATE
//            onMethod = {@NotNull}
    )
    
setter
@Setter(
            value = AccessLevel.PRIVATE
//            , onParam = {@NotNull}
    )

@ToString // 处理格式化输出 控制输出样式 是否读取get

 * val
 * 弱语言变量 自动识别 val field = "s";

二、验证框架
在这里插入图片描述

数据校验:JSR303、JSR349、JSR380
在这里插入图片描述
常用约束注解
在这里插入图片描述
中级约束

  1. 级联验证
  2. 分组验证
  3. 组序列
/**
     * group 同一个对象 进行分组验证
     */
    public interface LoginGroup {}
    public interface RegisterGroup {}

    // 组排序 依次验证 登录、注册、默认组
    @GroupSequence({
            LoginGroup.class,
            RegisterGroup.class,
            Default.class
    })
    public interface Group {}

    @NotNull(message = "用户id不能为空", groups = LoginGroup.class)
    private String userId;

    @NotEmpty(message = "用户名不能为空")
    private String userName;

    /**
     * notblank 自动trim前后空格
     */
    @NotBlank(message = "用户密码不能为空")
    @Length(min = 6, max = 20, message = "密码长度不能少于6位,多余20位")
    private String passWord;

    @NotNull(message = "邮箱不能为空", groups = RegisterGroup.class)
    @Email(message = "邮箱必须有效")
    private String email;

    @Min(value = 18, message = "年龄不能小于18岁")
    @Max(value = 60, message = "年龄不能大于60岁")
    private Integer age;

    private String phone;

    @Past(message = "生日不能为未来时间点")
    private Date birthday;

    /**
     * @Valid 级联验证 集合中所有对象验证
     */
    @Size(min = 1, message = "不能少于1个好友")
    private List<@Valid UserInfo> friends;

高级约束

  1. 校验参数
  2. 校验返回值
  3. 校验构造方法

完成验证的步骤

  1. 约束注解的定义
  2. 约束验证的规则(约束验证器)
  3. 约束注解的声明
  4. 约束验证的流程
/**
 * 自定义手机号约束注解
 */
@Documented
// 注解的作用目标
@Target({ElementType.FIELD})
// 注解的保留策略
@Retention(RetentionPolicy.RUNTIME)
// 不同之处:与约束注解关联的验证器
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {

    // 约束注解验证时的输出信息
    String message() default "手机号校验错误";

    // 约束注解在验证时所属的组别
    Class<?>[] groups() default {};

    // 约束注解的有效负载
    Class<? extends Payload>[] payload() default {};
}
public class PhoneValidator
        implements ConstraintValidator<Phone, String> {


    @Override
    public void initialize(Phone constraintAnnotation) {

    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {

        String check = "158\\d{8}";
        Pattern compile = Pattern.compile(check);
        Matcher matcher = compile.matcher(value);
        return matcher.matches();
    }
}
发布了83 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38885024/article/details/103933661