1.注解的定义
Java文件叫做Annotation,用@interface表示。
2.元注解
在创建注解的时候,需要使用一些注解来描述自己创建的注解,就是写在@interface上面的那些注解,这些注解被称为元注解。
2.1注解的保留策略
@Retention
表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解仅存在于源码中,在class字节码文件中不包含
CLASS:默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
RUNTIME:注解会在class字节码文件中存在,在运行时可以通过反射获取到
2.2注解的作用目标
@Target
表示该注解可以用于什么地方,可能的ElementType参数有:
CONSTRUCTOR:作用于构造函数
FIELD:作用于字段、枚举的常量
LOCAL_VARIABLE:作用于局部变量
METHOD:作用于方法
PACKAGE:作用于包
PARAMETER:作用于方法参数
TYPE:作用于接口、类、枚举、注解
ANNOTATION_TYPE:作用于注解
2.3注解包含在javadoc中
@Documented
2.4注解可以被继承
@Inherited
@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 {};
}
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;
}
}
@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;
...
}
@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);
}
评论