You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaX的ConstraintValidatorContext中排除自定义校验器默认消息

解决方案

在你的自定义校验器ValidItemValidator的isValid方法中,调用ConstraintValidatorContext.disableDefaultConstraintViolation()方法,即可禁用@ValidateItems注解中定义的默认校验消息,只保留你手动添加的自定义消息。

具体代码实现示例

  1. 自定义校验注解@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 {};
}
  1. 校验器实现类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:55:56