2013-01-14 3 views
5

프로젝트에서 bean 유효성 검사를 사용하며 기존 제한 사항 주석에 대한 사용자 정의 유효성 검사기를 작성하고 싶습니다.기존 Constraint에 대한 ConstraintValidator 사용자 정의

예를 들어 CustomDateTime이라는 날짜/시간을 나타내는 클래스가 있습니다. 예를 들어 내가 @Past와 함께 필드에 주석하고 싶습니다 출생의 날짜로이 클래스를 사용하는 클래스에서 :

public class Person 
{ 
    @Past 
    private CustomDateTime dateOfBirth; 
} 

나는 다음 ConstraintValidator<Past, CustomDateTime>을 구현하여 사용자 정의 유효성 검사기를 만들 수 있습니다. 그러나 유효성 검사 구현에는 사용자 지정 유효성 검사기에 대한 지식이 없으므로이 방법은 작동하지 않습니다. 그런 다음 javax.validation.UnexpectedTypeException: No validator could be found for type: com.example.CustomDateTime을 던집니다.

가 어떻게 @Past에 사용되는 사용자 정의 유효성 검사기를 등록 할 수 있습니다 ;-)

@Target({ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = {CustomDateTimePastValidator.class}) 
public @interface Past 
{ 
    .... 
} 

그러나 그것은 나에게 두 번 코드처럼 보인다 :

난 당신이 일반적으로이 같은 별도의 주석을 만들 것을 알고있다 ?

답변

4

기존 @Past 제약 조건에 대한 귀하의 제약 검사기를 추가하는 XML-based constraint mapping 정의 할 수 있습니다 : 다음

<?xml version="1.0" encoding="UTF-8"?> 
<constraint-mappings 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd" 
    xmlns="http://jboss.org/xml/ns/javax/validation/mapping"> 

    <constraint-definition annotation="javax.validation.constraints.Past"> 
     <validated-by include-existing-validators="true"> 
      <value>com.acme.CustomDateTimePastValidator</value> 
     </validated-by> 
    </constraint-definition> 
</constraint-mappings> 

참조 중 하나를 당신의 validation.xml에서이 매핑 :

<?xml version="1.0" encoding="UTF-8"?> 
<validation-config 
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"> 

    <constraint-mapping>/path/to/constraint-mapping.xml</constraint-mapping> 
</validation-config> 

아니면 부트 스트랩 중에를 추가하려면 유효성 검사기 :

InputStream mappingStream = ...; 

Validator validator = Validation 
    .byDefaultProvider() 
    .configure() 
    .addMapping(mappingStream) 
    .buildValidatorFactory() 
    .getValidator(); 
+0

@ siebz0r 당신에게 효과가 있었습니까? –