2017-03-06 64 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 –