public class DefaultMessageCodesResolver extends java.lang.Object implements MessageCodesResolver, java.io.Serializable
MessageCodesResolver
interface.
Will create two message codes for an object error, in the following order (when
using the prefixed
formatter
):
Will create four message codes for a field specification, in the following order:
For example, in case of code "typeMismatch", object name "user", field "age":
This resolution algorithm thus can be leveraged for example to show specific messages for binding errors like "required" and "typeMismatch":
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":
By default the errorCode
s 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.
Modifier and Type | Class and Description |
---|---|
static class |
DefaultMessageCodesResolver.Format
Common message code formats.
|
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
CODE_SEPARATOR
The separator that this implementation uses when resolving message codes.
|
private static MessageCodeFormatter |
DEFAULT_FORMATTER |
private MessageCodeFormatter |
formatter |
private java.lang.String |
prefix |
Constructor and Description |
---|
DefaultMessageCodesResolver() |
Modifier and Type | Method and Description |
---|---|
private void |
addCode(java.util.Collection<java.lang.String> codeList,
java.lang.String errorCode,
java.lang.String objectName,
java.lang.String field) |
private void |
addCodes(java.util.Collection<java.lang.String> codeList,
java.lang.String errorCode,
java.lang.String objectName,
java.lang.Iterable<java.lang.String> fields) |
protected void |
buildFieldList(java.lang.String field,
java.util.List<java.lang.String> fieldList)
Add both keyed and non-keyed entries for the supplied
field
to the supplied field list. |
protected java.lang.String |
getPrefix()
Return the prefix to be applied to any code built by this resolver.
|
protected java.lang.String |
postProcessMessageCode(java.lang.String code)
Post-process the given message code, built by this resolver.
|
java.lang.String[] |
resolveMessageCodes(java.lang.String errorCode,
java.lang.String objectName)
Build message codes for the given error code and object name.
|
java.lang.String[] |
resolveMessageCodes(java.lang.String errorCode,
java.lang.String objectName,
java.lang.String field,
java.lang.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(java.lang.String prefix)
Specify a prefix to be applied to any code built by this resolver.
|
public static final java.lang.String CODE_SEPARATOR
private static final MessageCodeFormatter DEFAULT_FORMATTER
private java.lang.String prefix
private MessageCodeFormatter formatter
public void setPrefix(java.lang.String prefix)
Default is none. Specify, for example, "validation." to get error codes like "validation.typeMismatch.name".
public void setMessageCodeFormatter(MessageCodeFormatter formatter)
The default is DefaultMessageCodesResolver.Format.PREFIX_ERROR_CODE
.
DefaultMessageCodesResolver.Format
protected java.lang.String getPrefix()
Returns an empty String in case of no prefix.
public java.lang.String[] resolveMessageCodes(java.lang.String errorCode, java.lang.String objectName)
MessageCodesResolver
resolveMessageCodes
in interface MessageCodesResolver
errorCode
- the error code used for rejecting the objectobjectName
- the name of the objectpublic java.lang.String[] resolveMessageCodes(java.lang.String errorCode, java.lang.String objectName, java.lang.String field, java.lang.Class<?> fieldType)
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.
resolveMessageCodes
in interface MessageCodesResolver
errorCode
- the error code used for rejecting the valueobjectName
- the name of the objectfield
- the field namefieldType
- the field type (may be null
if not determinable)private void addCodes(java.util.Collection<java.lang.String> codeList, java.lang.String errorCode, java.lang.String objectName, java.lang.Iterable<java.lang.String> fields)
private void addCode(java.util.Collection<java.lang.String> codeList, java.lang.String errorCode, java.lang.String objectName, java.lang.String field)
protected void buildFieldList(java.lang.String field, java.util.List<java.lang.String> fieldList)
field
to the supplied field list.protected java.lang.String postProcessMessageCode(java.lang.String code)
The default implementation applies the specified prefix, if any.
code
- the message code as built by this resolversetPrefix(java.lang.String)