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

Spring自定义ConstraintValidator错误消息自动追加propertyPath的问题

解决自定义校验错误消息带属性路径前缀的问题

针对你遇到的自定义ConstraintValidator校验后错误消息被追加upload.DocumentMetaDataApplicationRequest :前缀的问题,提供以下几种可行方案:

方案1:全局异常处理器中提取纯错误消息

捕获MethodArgumentNotValidException异常,直接提取错误的defaultMessage字段,舍弃自动添加的前缀部分:

@RestControllerAdvice
public class GlobalValidationExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<List<String>> handleValidationErrors(MethodArgumentNotValidException ex) {
        List<String> errorMessages = ex.getBindingResult()
                .getAllErrors()
                .stream()
                .map(ObjectError::getDefaultMessage)
                .collect(Collectors.toList());
        return new ResponseEntity<>(errorMessages, HttpStatus.BAD_REQUEST);
    }
}

方案2:自定义消息插值器去除前缀

通过自定义MessageInterpolator覆盖默认逻辑,让校验框架直接返回你定义的原始错误消息:

1. 实现自定义消息插值器

@Component
public class NoPrefixMessageInterpolator extends DefaultMessageInterpolator {

    @Override
    public String interpolate(String messageTemplate, Context context) {
        // 直接返回原始消息模板,不附加属性路径等前缀内容
        return messageTemplate;
    }
}

2. 配置自定义插值器到校验器

@Configuration
public class ValidationConfig {

    @Bean
    public Validator validator(NoPrefixMessageInterpolator interpolator) {
        LocalValidatorFactoryBean validatorFactory = new LocalValidatorFactoryBean();
        validatorFactory.setMessageInterpolator(interpolator);
        return validatorFactory;
    }
}

方案3:自定义校验注解时指定纯消息

确保你的自定义校验注解DocumentMetaDataValidator的message属性直接设置为目标字符串,避免使用占位符导致框架自动拼接前缀:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = DocumentMetaDataValidation.class)
public @interface DocumentMetaDataValidator {
    String message() default "Duplicate document type present";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

内容的提问来源于stack exchange,提问作者MoonPie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:40