自定义校验

接口:

java 复制代码
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {CannotBlankValidation.class})
public interface CannotBlank{
    //默认错误信息
    String message() default "不能包含空格";

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

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

    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface List {
        CannotBlank[] value();
    }
}

实现类:

java 复制代码
public class CannotBlankValidation implements ConstraintValidator<CannotBlank,String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (value != null && value.contains(" ")){
            //获取默认提示信息
            String defaultConstraintMessageTemplate = context.getDefaultConstraintMessageTemplate();
            System.out.println("default message : " + defaultConstraintMessageTemplate);

            //禁用默认提示信息
            context.disableDefaultConstraintViolation();

            //设置提示语
            context.buildConstraintViolationWithTemplate("can not contains blank").addConstraintViolation();

            return false;
        }
        return false;
    }
}

使用:

在属性上面使用注解

相关推荐
Grey Zeng3 小时前
Java SE 25新增特性
java·jdk·jdk新特性·jdk25
雨白5 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默9 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群10 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL11 小时前
JVM 类加载:双亲委派机制
java·后端
用户2986985301412 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥12 小时前
原来公平锁和非公平锁差别这么大
java
渣哥12 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K12 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty72512 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构