如何在JavaX的ConstraintValidatorContext中排除自定义校验器默认消息
解决方案
在你的自定义校验器ValidItemValidator的isValid方法中,调用ConstraintValidatorContext.disableDefaultConstraintViolation()方法,即可禁用@ValidateItems注解中定义的默认校验消息,只保留你手动添加的自定义消息。
具体代码实现示例
- 自定义校验注解
@ValidateItems(示例):
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = ValidItemValidator.class) public @interface ValidateItems { String message() default "Invalid Items object"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
- 校验器实现类
ValidItemValidator:
public class ValidItemValidator implements ConstraintValidator<ValidateItems, Items> { @Override public boolean isValid(Items items, ConstraintValidatorContext context) { boolean isValid = true; // 执行自定义校验逻辑,示例:检查items列表是否为空 if (items.getItems() == null || items.getItems().isEmpty()) { isValid = false; // 禁用默认约束消息 context.disableDefaultConstraintViolation(); // 添加自定义校验消息 context.buildConstraintViolationWithTemplate("Items列表不能为空") .addPropertyNode("items") .addConstraintViolation(); } // 其他校验规则... return isValid; } }
关键说明
disableDefaultConstraintViolation()方法会告知校验上下文,不要生成注解中message()属性定义的默认提示消息。- 调用该方法后,所有通过
buildConstraintViolationWithTemplate()添加的自定义消息会成为唯一的校验失败提示,默认消息不会再出现。
内容的提问来源于stack exchange,提问作者RAKESH YEDLAPPALLI
相关产品推荐
相关产品推荐

