覆盖Spring表单错误消息

时间:2015-06-15 16:55:46

标签: java spring default custom-errors

在Spring中如何覆盖默认表单错误按摩?

我正在使用Validator和属性文件来添加我自己的错误消息,但是 如何覆盖在转换​​/编码错误上打印的消息,例如?

它们似乎是自动生成的,我认为对用户没有帮助:

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 个答案:

答案 0 :(得分:6)

您可以通过在本地化软件包中创建自定义消息来覆盖默认值,其中的密钥遵循Spring DefaultMessageCodeResolver定义的约定。为了完整起见,这里是其文档的相关部分:

  

将为对象错误创建两个消息代码,如下所示   顺序(使用前缀格式化程序时):

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

将为字段规范创建四个消息代码   以下顺序:

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

例如,如果是代码" typeMismatch",对象名称"用户",字段   "年龄":

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

因此可以利用该分辨率算法来示出   绑定错误的特定消息,如" required"和   " 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). 
     

如果是数组,列表或地图属性,则两个代码都是特定的   生成元素和整个集合。假设一个领域   "名称"一个数组" groups"在对象"用户":

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" 
     

默认情况下,errorCodes将放在开头   构造消息字符串。 messageCodeFormatter属性可以是   用于指定替代级联格式。

     

为了将所有代码分组到您的代码中的特定类别   资源包,例如" validation.typeMismatch.name"而不是   默认" typeMismatch.name",考虑指定一个前缀   应用