2015-01-16 14 views
13

मैं जर्सी में एक बाकी संसाधन endpoint में मेरी POJOs मान्य कर रहा हूँ:स्वचालित रूप से झरना सेम-मान्यता रिकर्सिवली, @Valid एनोटेशन

public class Resource { 
    @POST 
    public Response post(@NotNull @Valid final POJO pojo) { 
     ... 
    } 
} 

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    @Valid 
    protected final POJOInner inner; 

    ... 
} 

public class POJOInner { 
    @Min(0) 
    protected final int limit; 

    ... 
} 

यह ठीक से काम करने लगता है।

हालांकि, @Min(0) एनोटेशन केवल तभी सत्यापित किया जाता है जब फ़ील्ड inner में @Valid एनोटेशन है। प्रत्येक क्षेत्र में @Valid एनोटेशन जोड़ने का अधिकार नहीं है जो कि आदिम नहीं है।

क्या @Valid एनोटेशन मौजूद होने पर भी स्वचालित रूप से पुनरावृत्ति जारी रखने के लिए बीन सत्यापनकर्ता को बताने का कोई तरीका है? मैं अपने POJO चाहते निम्नलिखित के रूप में मानेंगे:

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    protected final POJOInner inner; 

    ... 
} 
+0

क्या सेम सत्यापन क्रम आप उपयोग कर रहे हैं? –

+0

मैं हाइबरनेट वैलिडेटर का उपयोग कर रहा हूं। –

उत्तर

11

वास्तव में, विशेष निर्देशों के अनुसार, @Valid जोड़ने वास्तव में इस USECASE के लिए है। जेएसआर 303 विनिर्देशन से:

उदाहरण सत्यापन के समर्थन के अलावा, ऑब्जेक्ट के ग्राफ़ की सत्यापन भी समर्थित है। ग्राफ़ सत्यापन का नतीजा बाधा उल्लंघन के एक एकीकृत सेट के रूप में वापस किया जाता है। उस स्थिति पर विचार करें जहां बीन एक्स में वाई प्रकार का क्षेत्र शामिल है। @ वाल्ड एनोटेशन के साथ फ़ील्ड वाई को एनोटेट करके, वैलिडेटर वाई (और इसके गुण) को मान्य करेगा जब एक्स मान्य है।

...

@Valid एनोटेशन रिकर्सिवली लागू किया जाता है

+0

वसंत डिफ़ॉल्ट रूप से ऐसा नहीं करता है .. मैं वसंत बूट 2.0.0 का उपयोग कर रहा हूं। BUILD-SNAPSHOT –

+2

हालांकि यह सच हो सकता है कि यह समझा नहीं जाता है कि सभी सदस्यों को एनोटेट करने की आवश्यकता के बिना रिकर्सिव सत्यापन प्राप्त करना संभव है या नहीं क्या ओपी पूछ रहा है .. – cen

संबंधित मुद्दे