一、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
常用约束注解
中级约束
- 级联验证
- 分组验证
- 组序列
/**
* 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;
高级约束
- 校验参数
- 校验返回值
- 校验构造方法
完成验证的步骤
- 约束注解的定义
- 约束验证的规则(约束验证器)
- 约束注解的声明
- 约束验证的流程
/**
* 自定义手机号约束注解
*/
@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();
}
}