覆盖Spring表单错误消息

Gio*_*nJh 4 java spring default custom-errors

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

我正在使用a 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: 
Run Code Online (Sandbox Code Playgroud)

Boh*_*rdt 7

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

将按以下顺序(使用带前缀的格式化程序时)为对象错误创建两个消息代码:

1.: code + "." + object name
2.: code 
Run Code Online (Sandbox Code Playgroud)

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

1.: code + "." + object name + "." + field
2.: code + "." + field
3.: code + "." + field type
4.: code 
Run Code Online (Sandbox Code Playgroud)

例如,在代码"typeMismatch"的情况下,对象名称"user",字段"age":

1. try "typeMismatch.user.age"
2. try "typeMismatch.age"
3. try "typeMismatch.int"
4. try "typeMismatch" 
Run Code Online (Sandbox Code Playgroud)

因此,可以利用该解析算法来显示诸如"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). 
Run Code Online (Sandbox Code Playgroud)

对于数组,列表或映射属性,将生成特定元素和整个集合的代码.假设对象"user"中数组"groups"的字段"name":

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" 
Run Code Online (Sandbox Code Playgroud)

默认情况下,errorCodes将放置在构造的消息字符串的开头.messageCodeFormatter属性可用于指定备用串联格式.

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