@Size(min, max) but not required

Mariusz Grodek picture Mariusz Grodek · Jul 18, 2012 · Viewed 8k times · Source

Hi In my spring webapp I have a password variable which I want to be at least 0 characters or more than 6 and less than 20. I know that there is annotation:

 @Size(min=6, max=20)

but I have no idea how to add possibility that password can be 0 characters. Will somebody help me with this?

Answer

Xaerxess picture Xaerxess · Jul 19, 2012

Given the comment, you can use StringTrimmerEditor to convert empty string to null, and then @Size check will not trigger (null is considered as valid in @Size).

In your controller add following method:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

Note that StringTrimmerEditor also trims input from spaces, and if you only want one property to be affected by this editor use registerCustomEditor(Class<?> requiredType, String propertyPath, PropertyEditor propertyEditor).