2013-01-14 31 views
5

के लिए कस्टम कॉन्स्ट्रेनट वैलिडेटर पंजीकृत करें मैं अपने प्रोजेक्ट में बीन-सत्यापन का उपयोग करता हूं और मैं मौजूदा बाधा एनोटेशन के लिए एक कस्टम सत्यापनकर्ता लिखना चाहता हूं।मौजूदा बाधा

उदाहरण के लिए मेरे पास एक कक्षा है जो 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

मुझे पता है कि आप आमतौर पर इस तरह एक अलग एनोटेशन बनाएं:

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

लेकिन वह मेरे लिए डबल कोड की तरह लगता है ;-)

मैं कस्टम सत्यापनकर्ता रजिस्टर कैसे कर सकते हैं @Past साथ प्रयोग किया जा करने के लिए ?

उत्तर

4

आप एक XML-based constraint mapping जो मौजूदा @Past बाधा के लिए अपने बाधा सत्यापनकर्ता कहते हैं परिभाषित कर सकते हैं: तो फिर या तो संदर्भ

<?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> 

या आप bootstrapping दौरान इसे जोड़ने के अपने सत्यापनकर्ता:

InputStream mappingStream = ...; 

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

@ siebz0r क्या यह आपके लिए काम करता है? –