Class DefaultMessageCodesResolver
- java.lang.Object
- org.springframework.validation.DefaultMessageCodesResolver
- All Implemented Interfaces:
Serializable
,MessageCodesResolver
public class DefaultMessageCodesResolver extends Object implements MessageCodesResolver, Serializable
Default implementation of theMessageCodesResolver
interface.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
orMap
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
errorCode
s will be placed at the beginning of constructed message strings. ThemessageCodeFormatter
property can be used to specify an alternative concatenationformat
.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.- Since:
- 1.0.1
- Author:
- Juergen Hoeller, Phillip Webb, Chris Beams
- See Also:
- Serialized Form
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DefaultMessageCodesResolver.Format
Common message code formats.
Field Summary
Fields Modifier and Type Field Description static String
CODE_SEPARATOR
The separator that this implementation uses when resolving message codes.
Constructor Summary
Constructors Constructor Description DefaultMessageCodesResolver()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
buildFieldList(String field, List<String> fieldList)
Add both keyed and non-keyed entries for the suppliedfield
to the supplied field list.protected String
getPrefix()
Return the prefix to be applied to any code built by this resolver.protected String
postProcessMessageCode(String code)
Post-process the given message code, built by this resolver.String[]
resolveMessageCodes(String errorCode, String objectName)
Build message codes for the given error code and object name.String[]
resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType)
Build the code list for the given code and field: an object/field-specific code, a field-specific code, a plain error code.void
setMessageCodeFormatter(MessageCodeFormatter formatter)
Specify the format for message codes built by this resolver.void
setPrefix(String prefix)
Specify a prefix to be applied to any code built by this resolver.
Field Detail
CODE_SEPARATOR
public static final String CODE_SEPARATOR
The separator that this implementation uses when resolving message codes.- See Also:
- Constant Field Values
Constructor Detail
DefaultMessageCodesResolver
public DefaultMessageCodesResolver()
Method Detail
setPrefix
public void setPrefix(String prefix)
Specify a prefix to be applied to any code built by this resolver.Default is none. Specify, for example, "validation." to get error codes like "validation.typeMismatch.name".
getPrefix
protected String getPrefix()
Return the prefix to be applied to any code built by this resolver.Returns an empty String in case of no prefix.
setMessageCodeFormatter
public void setMessageCodeFormatter(MessageCodeFormatter formatter)
Specify the format for message codes built by this resolver.The default is
DefaultMessageCodesResolver.Format.PREFIX_ERROR_CODE
.- Since:
- 3.2
- See Also:
DefaultMessageCodesResolver.Format
resolveMessageCodes
public String[] resolveMessageCodes(String errorCode, String objectName)
Description copied from interface:MessageCodesResolver
Build message codes for the given error code and object name. Used for building the codes list of an ObjectError.- Specified by:
resolveMessageCodes
in interfaceMessageCodesResolver
- Parameters:
errorCode
- the error code used for rejecting the objectobjectName
- the name of the object- Returns:
- the message codes to use
resolveMessageCodes
public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType)
Build the code list for the given code and field: an object/field-specific code, a field-specific code, a plain error code.Arrays, Lists and Maps are resolved both for specific elements and the whole collection.
See the
class level javadoc
for details on the generated codes.- Specified by:
resolveMessageCodes
in interfaceMessageCodesResolver
- Parameters:
errorCode
- the error code used for rejecting the valueobjectName
- the name of the objectfield
- the field namefieldType
- the field type (may benull
if not determinable)- Returns:
- the list of codes
buildFieldList
protected void buildFieldList(String field, List<String> fieldList)
Add both keyed and non-keyed entries for the suppliedfield
to the supplied field list.
postProcessMessageCode
protected String postProcessMessageCode(String code)
Post-process the given message code, built by this resolver.The default implementation applies the specified prefix, if any.
- Parameters:
code
- the message code as built by this resolver- Returns:
- the final message code to be returned
- See Also:
setPrefix(java.lang.String)