我已经用Google搜索并检查了这个问题的Javadocs,但我找不到多少。
我正在尝试在他们通常使用的实际JSR-303验证器之外的validationMessages.properties
文件中使用一些用户验证消息(它们在正常的验证周期中正常工作。)
具体来说,我正在尝试使用此消息:
javax.validation.constraints.Size.message=This field has a maximum length of {max}.
通常我会使用典型的ResourceBundleMessageSource bean:
@Autowired
private ResourceBundleMessageSource messageSource;
result.append(messageSource.getMessage("javax.validation.constraints.Size.message", new Object[]{maxLength}, "", null));
但在这种情况下,由于{max}
参数,我得到了这个:
java.lang.IllegalArgumentException: can't parse argument number: max
java.text.MessageFormat.makeFormat(MessageFormat.java:1420)
java.text.MessageFormat.applyPattern(MessageFormat.java:479)
java.text.MessageFormat.<init>(MessageFormat.java:381)
org.springframework.context.support.MessageSourceSupport.createMessageFormat(MessageSourceSupport.java:159)
org.springframework.context.support.ResourceBundleMessageSource.getMessageFormat(ResourceBundleMessageSource.java:371)
org.springframework.context.support.ResourceBundleMessageSource.resolveCode(ResourceBundleMessageSource.java:257)
org.springframework.context.support.AbstractMessageSource.getMessageInternal(AbstractMessageSource.java:205)
org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:113)
验证器消息具有{max}
,其中正常参数化消息具有{1}。
我很快发现,对于验证消息,我需要通过验证消息处理来运行它,而不是“常规”Spring消息处理。但是,我无法弄清楚如何做到这一点。 ResourceBundleMessageInterpolator
仅包含interpolate(String message, Context context)
函数,无法直接访问以构建消息。我找不到任何关于如何构建上下文对象的文档或示例,所以我有点卡住了。任何人都可以以独立的方式告诉我如何在整个验证过程之外执行此操作(插入验证器消息)?