Override Spring form error messages

…衆ロ難τιáo~ 提交于 2019-12-10 15:12:50

问题


In Spring how do I override default form error massages ?

I'm using a Validator and a properties file to add my own error messages, but how do I override messages that get printed on conversion/encoding error for example ?

They seem to be generated automatically and I don't think are helpful for the user:

Failed to convert property value of type java.lang.String to required type java.lang.Double for property minPrice; nested exception is java.lang.NumberFormatException: 

回答1:


You can override the defaults by creating custom messages in your localization bundle with keys following conventions defined by Spring's DefaultMessageCodeResolver. For the sake of completeness here is the relevant part of its documentation:

Will create two message codes for an object error, in the following order (when using the prefixed formatter):

1.: code + "." + object name
2.: code 

Will create four message codes for a field specification, in the following order:

1.: code + "." + object name + "." + field
2.: code + "." + field
3.: code + "." + field type
4.: code 

For example, in case of code "typeMismatch", object name "user", field "age":

1. try "typeMismatch.user.age"
2. try "typeMismatch.age"
3. try "typeMismatch.int"
4. try "typeMismatch" 

This resolution algorithm thus can be leveraged for example to show specific messages for binding errors like "required" and "typeMismatch":

at the object + field level ("age" field, but only on "user");
at the field level (all "age" fields, no matter which object name);
or at the general level (all fields, on any object). 

In case of array, List or Map properties, both codes for specific elements and for the whole collection are generated. Assuming a field "name" of an array "groups" in object "user":

1. try "typeMismatch.user.groups[0].name"
2. try "typeMismatch.user.groups.name"
3. try "typeMismatch.groups[0].name"
4. try "typeMismatch.groups.name"
5. try "typeMismatch.name"
6. try "typeMismatch.java.lang.String"
7. try "typeMismatch" 

By default the errorCodes will be placed at the beginning of constructed message strings. The messageCodeFormatter property can be used to specify an alternative concatenation format.

In order to group all codes into a specific category within your resource bundles, e.g. "validation.typeMismatch.name" instead of the default "typeMismatch.name", consider specifying a prefix to be applied.



来源:https://stackoverflow.com/questions/30850767/override-spring-form-error-messages

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!