Spring 3.0 MVC binding Enums Case Sensitive
Solution 1:
Broadly speaking, you want to create a new PropertyEditor that does the normalisation for you, and then you register that in your Controller like so:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Product.class,
new CaseInsensitivePropertyEditor());
}
Solution 2:
I think you will have to implement a Custom PropertyEditor.
Something like this:
public class ProductEditor extends PropertyEditorSupport{
@Override
public void setAsText(final String text){
setValue(Product.valueOf(text.toUpperCase()));
}
}
See GaryF's answer on how to bind it
Here's a more tolerant version in case you use lower case in your enum constants (which you probably shouldn't, but still):
@Override
public void setAsText(final String text){
Product product = null;
for(final Product candidate : Product.values()){
if(candidate.name().equalsIgnoreCase(text)){
product = candidate;
break;
}
}
setValue(product);
}