2011-02-07 10 views
12

क्या javax.validation का उपयोग करने के लिए एक तरीका है जिसे रंग टाइप करने वाले प्रकार के चर को मान्य करने के लिए एक तरीका है जिसे एनोटेशन का उपयोग करके इन मानों को केवल (लाल, नीला, हरा, गुलाबी) होना चाहिए?javax.validation?

मैं @size देखा है (न्यूनतम = 1, अधिकतम = 25) और @notnull लेकिन इस @In की तरह कुछ (लाल, नीले, हरे, गुलाबी) है

अधिक या कम "में के समान "mysql

+0

हाय। मुझे लगता है कि जैवैक्स वैधकर्ताओं का उपयोग करके यह संभव नहीं है? मुझे लगता है कि मैं सिर्फ टेबल/डेटाबेस स्तर पर एक बाधा बना सकता हूं? – jonney

उत्तर

28

उस मामले में मुझे लगता है कि यह नीचे टुकड़ा की तरह, @Pattern एनोटेशन उपयोग में अधिक आसान होगा। यदि आप एक केस संवेदी मूल्यांकन चाहते हैं, बस उचित झंडा जोड़ें:

@Pattern(regexp = "red|blue|green|pink", flags = Pattern.Flag.CASE_INSENSITIVE)

8

में उपयोग किया गया कीवर्ड आप एक कस्टम सत्यापन एनोटेशन बना सकते हैं। मैं इसे यहाँ लिखेंगे (अपरीक्षित कोड!):

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RUNTIME) 
@Documented 
@Constraint(validatedBy = InConstraintValidator.class) 
public @interface In 
{ 
    String message() default "YOURPACKAGE.In.message}"; 

    Class<?>[] groups() default { }; 

    Class<? extends Payload>[] payload() default {}; 

    Object[] values(); // TODO not sure if this is possible, might be restricted to String[] 
} 

public class InConstraintValidator implements ConstraintValidator<In, String> 
{ 

    private Object[] values; 

    public final void initialize(final In annotation) 
    { 
     values = annotation.values(); 
    } 

    public final boolean isValid(final String value, final ConstraintValidatorContext context) 
    { 
     if (value == null) 
     { 
      return true; 
     } 
     return ...; // check if value is in this.values 
    } 

} 
+0

char की सूची को सत्यापित करने का प्रयास करते समय उपयोगी, लेकिन आप 'मानों' को ऑब्जेक्ट्स की सरणी के रूप में परिभाषित नहीं कर सकते हैं। कंपाइलर यह त्रुटि देता है: एनोटेशन विशेषता के लिए 'अमान्य प्रकार ऑब्जेक्ट [] In.values; केवल आदिम प्रकार, स्ट्रिंग, कक्षा, एनोटेशन, गणना की अनुमति है या इसके 1-आयामी सरणी हैं ' – maureyes

0

आप एक enum बना सकते हैं

public enum Colors { 
    RED, PINK, YELLOW 
} 

और फिर अपने मॉडल में, आप यह बहुत की तरह मान्य कर सकते हैं:

public class Model { 
    @Enumerated(EnumType.STRING) 
    private Colors color; 
} 

जो enum के खिलाफ अपने पेलोड को मान्य होगा, यह देखते हुए कि आप अपने रेस में @Valid जोड़ लिया है tController।

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