2017-03-06 69 views
0

我使用的是spring引导,apache cxf,jaxrs和hibernate验证器。我正在尝试为方法参数创建自定义约束。原因是@Valid没有组。我该如何注册或将其添加到hibernate验证器,以便它的行为像@Valid,即ExecutableValidator。下面是代码apache cxf jaxrs注册自定义hibernate参数约束

@Target({ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy=MyValidator.class) 
@Documented 
public @interface ValidInput { 
    String message() default "com.xyz.message"; 

    Class<?>[] groups() default { }; 

    Class<? extends Payload>[] payload() default { }; 
} 

@Provider 
@Component 
public class MyValidator implements ConstraintValidator<ValidInput, Entity> { 

    private static Validator validator; 

    private Class<?>[] groups ; 

    Class<? extends Payload>[] payload; 

    static{ 
     ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
     validator = factory.getValidator(); 
    } 

    @Override 
    public void initialize(ValidInput constraintAnnotation) { 
     this.groups = constraintAnnotation.groups(); 
     this.payload = constraintAnnotation.payload(); 
    } 

    @Override 
    public boolean isValid(Entity value, ConstraintValidatorContext context) { 
     //logic here 
    } 


} 

现在,当我使用约束上休息服务方法参数,验证是不是在所有调用。我想用@ValidInput代替@Valid。

请帮忙

回答

0

希望你已启用验证功能。

@Bean 
    public JAXRSBeanValidationFeature beanValidationFeature(){ 
     JAXRSBeanValidationFeature feature = new JAXRSBeanValidationFeature(); 
     return feature; 
    } 

    @Bean 
    public ValidationExceptionMapper validationExceptionMapper(){ 
     return new ValidationExceptionMapper(); 
    } 
+0

我已启用它。内置的约束条件正常。 – shiva

+0

我也尝试了Validateonexecute注解。但它不起作用。不知道是否缺少任何配置。我已经开始关注使用@Validated解决我的需求的spring验证器。这允许指定约束组。但是,我渴望知道我在使用hibernate验证程序时缺少的什么 – shiva

+0

您是否可以通过启用cxf调试日志来检查是否正在调用JAXRSBeanValidationInInterceptor –