@Constraint 注解的使用

spring boot在Post接受一个对象参数的时候可以使用@Valid去验证,如下代码

@RestController

@Slf4j

public class UserController {

@PostMapping("/user")

public User postUser(@Valid @RequestBody User user, BindingResult bindingResult){

//如果验证通不过的处理

if(bindingResult.hasErrors()){

//打印错误

log.info("error={}",bindingResult.getFieldError().getDefaultMessage());

}

}

}

在创建一个User类

@Data
public class User {

private String username;

@NotBlank(message = "密码不能为空")
private String password;

private Integer id;

@Past(message = "生日不能是之后的日期")
private Date birthday;
}

上面的@NotBlank和@Past就做了一个判断,如何做类似的注解用来验证数据

创建一个MyConstraint的接口

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy =MyConstraintValidator.class )
public @interface MyConstraint {
String message() default "小松博客自定义注解";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}
  1. @Retention :用来说明该注解类的生命周期。它有以下三个参数:
    RetentionPolicy.SOURCE : 注解只保留在源文件中
    RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
    RetentionPolicy.RUNTIME : 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。

@Target : 用来说明该注解可以被声明在那些元素之前。
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前。

@Constraint来限定自定义注解的方法
这里写的类是下面自定义的类

接口里面的方法是其他注解上都有这些方法,列如@Past

springboot past注解源码

创建MyConstraintValidator的类

public class MyConstraintValidator implements ConstraintValidator<MyConstraint,Object> {
@Override
public void initialize(MyConstraint myConstraint) {
//初始化的时候
System.out.println("my validator init");
}

@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
//这里写判断逻辑
System.out.println(o);
//我这里直接方法false,就是要提示错误,如果返回true就表示验证通过
return false;
}
}

现在就可以在User类里使用,上面注解MyConstraint定义message的时候没有设置默认值

@Data
public class User {
//使用自定义注解
@MyConstraint
private String username;

@NotBlank(message = "密码不能为空")
private String password;

private Integer id;

@Past(message = "生日不能是之后的日期")
private Date birthday;
}

 

现在访问一下看控制台就能显示错误了

springboot 自定义注解


转载保留版权:小松博客» spring boot 自定义Validator注解
本文链接地址:https://www.phpsong.com/3567.html

  • 16
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值