Search code examples
jakarta-eejava-ee-6bean-validation

JSR-303 Bean Validation for enum fields


I have a simple bean with enum field

public class TestBean{
   @Pattern(regexp = "A|B") //does not work
   private TestEnum testField;
   //getters + setters
}

enum TestEnum{
  A, B, C, D
}

I would like to validate testField using Bean Validation. Specifically I would like to make sure that only A and B values are allowed (for a particular calidation gropus). It seems that enums are not handled JSR 303 (I was trying to use @Pattern validator) or I am doing something in a wrong way.

I am getting exception:

javax.validation.UnexpectedTypeException: No validator could be found for type: packagename.TestEnum

Is there any way to validate enum fields without writing custom validator?


Solution

  • If you want to put the constraint on testField you need a custom validator. None of the default ones handle enums.

    As a workaround you could add a getter method which returns the string value of the enum

    public class TestBean{
       private TestEnum testField;
       //getters + setters
    
       @Pattern(regexp = "A|B") //does not work
       private String getTestFieldName() {
           return testField.name();
       }
    }
    

    A custom validator is probably the cleaner solution though.