can I override a jsr-303 validation annotation

后端 未结 3 1227
不思量自难忘°
不思量自难忘° 2020-12-06 11:39

I have a test like below:

public class TestSizeAnnotation
{
    public static void main(String[] args)
    {
        System.out.println(Validation.buildDefau         


        
相关标签:
3条回答
  • 2020-12-06 11:48

    Overriding validation annotations is actually not supported for JSR-303. Instead annotations on overridden methods in the subclass will be applied cumulatively: From section 3.3 of the specification:

    A constraint declaration can be placed on an interface. For a given class,
    constraint declarations held on super- classes as well as interfaces are
    evaluated by the Bean Validation provider. Rules are formally described in
    Section 3.4.5.
    
    The effect of constraint declarations is cumulative. Constraints declared
    on a superclass getter will be validated along with any constraints defined
    on an overridden version of the getter according to the Java Language
    Specification visibility rules.
    
    0 讨论(0)
  • 2020-12-06 11:54

    Just for the records, I have found a bypass for my problem:

    public class TestSizeAnnotation
    {
        public static void main(String[] args)
        {
            System.out.println("c " + 
                    Validation.buildDefaultValidatorFactory().getValidator().validate(new C(), Default.class, SizeGroup2.class));
            System.out.println("p " + 
                    Validation.buildDefaultValidatorFactory().getValidator().validate(new P(), Default.class, SizeGroup.class));
        }
        public static interface SizeGroup {}
        public static interface SizeGroup2 {}
        public static class P 
        {
            private List<String> lst = newArrayList("AA");
            @Size(max=0, message="P" , groups=SizeGroup.class)
            public List<String> getLst()
            {
                return lst;
            }
            public void setLst(List<String> lst)
            {
                this.lst = lst;
            }
        }
        public static class C extends P 
        {
            @Override
            @Size(max=5, message="C", groups=SizeGroup2.class)
            public List<String> getLst()
            {
                return super.getLst();
            }
    
        }
    }
    
    0 讨论(0)
  • 2020-12-06 12:00

    You can ovveride an annotation configured validation via xml configuration:

    http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-xmlconfiguration

    In your case, if you declare a different validation (or no validation) for the getList() methid in the validation.xml file, it will override the @Size annotation.

    0 讨论(0)
提交回复
热议问题