【发布时间】:2014-04-03 11:09:13
【问题描述】:
我正在尝试使用针对方法参数的交叉参数约束验证器。问题是验证不是针对方法参数触发的,而是针对方法返回值触发的。
我正在使用 Spring 的 LocalValidatorFactoryBean。
JSR-303 提供程序是 hibernate-validator 4.2.0.Final。
Spring 版本是 3.2.0。
Spring 配置摘录:
<!-- JSR 303 validation -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
<property name="validator" ref="validator"/>
<bean>
自定义约束验证器:
@SupportedValidationTarget( ValidationTarget.PARAMETERS )
public class InstanceValidator implements
ConstraintValidator<InstanceCheck, Object[]> {
@Override
public void initialize(InstanceCheck constraintAnnotation) {}
@Override
public boolean isValid(Object[] value, ConstraintValidatorContext context) {
...
}
}
注释:
@Target( { METHOD, ANNOTATION_TYPE, CONSTRUCTOR } )
@Retention(RUNTIME)
@Constraint(validatedBy = InstanceValidator.class)
@Documented
public @interface InstanceCheck {
String message() default "{constraint.instance.not.allowed}";
public abstract Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() default {};
}
一些服务:
@Validated
public interface SomeService {
...
@InstanceCheck
public String addContent(String content) throws SomeException;
...
}
SomeServiceImpl :
@Service
public class SomeServiceImpl implements SomeService {
...
public String addContent(String content) throws SomeException {
// do something
}
...
}
:更新:
我已经尝试为注解类型添加“validationAppliesTo”方法(见下文)
@Target( { METHOD, ANNOTATION_TYPE, CONSTRUCTOR } )
@Retention(RUNTIME)
@Constraint(validatedBy = InstanceValidator.class)
@Documented
public @interface InstanceCheck {
String message() default "{constraint.instance.not.allowed}";
public abstract Class<?>[] groups() default {};
public abstract Class<? extends Payload>[] payload() default {};
ConstraintTarget validationAppliesTo() default ConstraintTarget.PARAMETERS;
}
,现在我收到以下错误: “约束中不允许使用以 'valid' 开头的参数。”
提前感谢任何类型的建议。
【问题讨论】:
标签: java spring constraints hibernate-validator