I made an enhancement to the Groovy Validator project.
I added a boolean called “throwException” that will throw an exception if one of the fields does not validate. It is optional, and defaults to false. If an exception is thrown, it will print out the value and the constraints.
You can use it for POGOs with the AnnotationProcessor class like this:
AnnotationProcessor.process( Book, true )
You might get a message like this:
"Hey" is a String with a length outside the range of 5 and 10"
You can also use it with immutable objects annotated with the AstImmutableConstructor annotation. This would be a second boolean after the Map with your properties, since the first boolean controls validation:
def thirdImObject = new ImmutableObject002( [ firstString: "Hi Once Again", firstInt: 123456789, firstLong: 22L ], true, true )
In that case, you get a message with a line for each field. So you might get a whopper message like this:
Groovy validation exception: "eeeeeeeeeee" is a String with a length outside the range of 5 to 10 characters "NNNNNNNNNNNNNNNN" is a String with a length outside the range of 0 to 15 characters 101.0 is a double outside the range 10.0 and 100.0 101.0 is a float outside the range 10.0 and 100.0 101 is an integer outside the range 10 and 100 101 is a long outside the range 0 and 100
If “thowException” is true for a POGO, the field will either retains its pre-existing value (if it had one) or be set to null. If “throwException” is true for an immutable object, the object will not be created.