【发布时间】:2023-04-01 23:01:01
【问题描述】:
我有一个获取客户信息的 DTO 类。许多字段都带有验证限制注释。 @NotNull @Length @Min @Max @Pattern... 等等。我们需要从属性文件加载正则表达式以进行验证,因此我们需要创建 @CustomPattern 以及 CustomerValidationAdvice。
@Before("@annotation(customPattern)")
public void validateWithPropertyFileValue(JoinPoint joinPoint, CustomPattern customPattern) throws Throwable {
if(applicationProps==null) {
applicationProps = (Properties) ApplicationContextProvider.getApplicationContext().getBean(
"applicationProps");
}
Object[] paramValues = joinPoint.getArgs();
String valueToValidate="";
if (!ArrayUtils.isEmpty(paramValues)) {
valueToValidate = paramValues[0] != null ? (String) paramValues[0] : valueToValidate;
}
if (!serverValidationUsingRegexPattern(valueToValidate, applicationProps.getProperty(customPattern.regexp()))) {
throw new ValidationException("Validation Failed");
}
}
问题在于,当从传入请求设置 DTO 上的值时,即使该方法未使用 @Valid 注释,也会执行此操作。除非将对象传递给验证器或 @valid 在方法上,否则不会执行其他验证参数。我可以在 joinPoint 中查看哪些内容来确定它是从哪里调用的并跳过验证?
【问题讨论】:
标签: java spring validation