Search code examples
spring-mvcspring-webflow

Spring form binding - use IllegalArgumentException message as error message


I have a custom domain class with a single constructor that takes a String, as well as a toString() method. The constructor decodes the input string, performs validations on it and throws IllegalArgumentException if invalid.

I want to bind directly to this field, as described here: http://blog.springsource.org/2009/11/17/spring-3-type-conversion-and-validation/ (see 'Convention Over Configuration' section).

That is working fine & I am displaying the error message resolved by Spring (typeMismatch on barcodeInfo).

I know that I can customize this error message using a messageSource entry, e.g.

typeMismatch.barcodeInfo=Invalid format

However, the error message that I want to display isn't always the same, it depends on the value of the input string. Hence, I want to display the error message that I originally used in the IllegalArgumentException that I threw from the constructor. Is this possible?

I am specifically looking for a solution which will work with Spring WebFlow.


Solution

  • You might want to check BindingErrorProcessor used by WebDataBinder. There you can implement your own custom logic for translating exceptions to validation errors.


    Notes:

    • You should implement your own exception (to be able to distinguish it from IllegalArgumentException thorwn by other components).
    • You can initialize WebDataBinder with your custom BindingErrorProcessor within your @InitBinder method (or set specific WebBindingInitializer to your handler adapter).