自定义validator注解

本文介绍如何在Java中自定义validator,包括创建自定义注解MyConstraint及其校验类MyConstraintValidator,通过实例演示如何应用于User类属性校验,并提供了一个用于验证的控制器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义validator

1.创建一个注解MyConstraint,@Constraint中的validatedBy用来指定校验操作的类

@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {
    String message();

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

    Class<? extends Payload>[] payload() default {};
}

2.创建一个ConstraintValidator接口的实现类,ConstraintValidator<A,T>中的A为我们自己自定义的注解,T表示的是被注解的类型,我们这里用object表示所有的类型都可以使用我们自定义的注解

public class MyConstraintValidator  implements ConstraintValidator<MyConstraint,Object>{

    // 初始化
    @Override
    public void initialize(MyConstraint constraintAnnotation) {
        System.out.println("init");
    }

    // 执行校验操作
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        System.out.println("传进来的值:"+value);
        System.out.println("上下文:"+context);
        return false; //校验成功返回 true
    }
}

3.在model上注解,写一个controller来验证一下

public class User {
    public interface UserSimpleView {};  // 定义一个简单的用户视图接口
    public interface UserDetailView extends UserSimpleView {
    };  // 定义一个详细的用户视图接口

    @MyConstraint(message = "自定义注解测试")
    private String username;

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

    private Date birthday;


    @JsonView(UserSimpleView.class)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @JsonView(UserDetailView.class)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @JsonView(UserSimpleView.class)
    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}
@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping
    public User create(@Valid @RequestBody User user){
        System.out.println(user);
        return user;
    }
}

利用工具测试返回值

输入图片说明

官方提供的注解

转载于:https://my.oschina.net/u/3628952/blog/1619816

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值