2017-03-06 9 views
0

저는 스프링 부팅, apache cxf, jaxrs 및 최대 절전 유효성 검사기를 사용하고 있습니다. 메서드 매개 변수에 대한 사용자 지정 제약 조건을 만들려고합니다. 이유는 @Valid에 groups가 없다는 것입니다. hibernate validator에이를 등록하거나 추가하여 @Valid ie ExecutableValidator처럼 작동하도록하십시오. 나는 휴식 서비스 메서드 매개 변수에 대한 제약 조건을 사용할 때 아래, 이제 코드apache cxf jaxrs 사용자 정의 최대 절전 모드 매개 변수 제약 조건을 등록하십시오.

@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 
    } 


} 

이다, 발리는 전혀 호출되지 않습니다. @Valid 대신 @ValidInput을 사용하고 싶습니다.

pls help

답변

0

유효성 검사 기능을 사용하시기 바랍니다.

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

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

예. 사용하도록 설정했습니다. 내장 제약 조건이 잘 작동하고 있습니다. – shiva

+0

나는 Validateonexecute 어노테이션도 시도했다. 하지만 작동하지 않습니다. 구성이 누락되었는지 확실하지 않습니다. 나는 @Validated로 나의 요구 사항을 해결하는 스프링 밸리데이터를보기 시작했다. 제약 조건 그룹을 지정할 수 있습니다. 하지만, 나는 hibernate validator가 무엇인지 알기를 열망하고있다. – shiva

+0

cxf 디버그 로그를 활성화하여 JAXRSBeanValidationInInterceptor가 호출되는지 확인할 수있다. –