【问题标题】:How to get Spring mvc validation messages without using messages.properties?如何在不使用messages.properties的情况下获取Spring mvc验证消息?
【发布时间】:2023-04-02 09:25:02
【问题描述】:

我有一个带有控制器、模型、服务和验证类的 Spring mvc 应用程序。一切正常。在开发我目前拥有的东西时,我将验证消息存储在一个 messages.properties 文件中——我在这样的配置类中注册了该文件:

@Bean
public MessageSource messageSource() {

    final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("[package name]/messages/messages");

    return messageSource;
}

在验证器中,如果用户没有回答这样的字段,我会添加一条验证消息:

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "required", new Object[] {"Age"});

在 messages.properties 文件中我有这个('age' 上面是模型对象的名称,'required' 是用于在 messages.properties 文件中检索消息的键):

required = {0} is required.

好的,再次 - 这一切都很好。但我想做的是将消息外部化到数据库(基本上,这些是所有应用程序都使用的公司消息)。

我的问题是 - 如何让 Spring 使用数据库而不是 messages.properties?还是我确实使用messages.properties,只存储消息的id(数据库键)而不是消息本身?

我对该怎么做有几个想法,但不知道怎么做。我“认为”Spring-form 标记库最终会执行获取实际消息的工作。也许我可以以某种方式拦截那个电话?或者可能以某种方式将 messageSource 更改为其他内容,而不是定义 messages.properties 文件。

无论如何,有人有什么想法吗?

【问题讨论】:

    标签: spring spring-mvc validation


    【解决方案1】:

    使用自定义 MessageSource 实现而不是使用 ResourceBundleMessageSource,该实现返回数据库中。不幸的是 Spring 本身没有这样的实现,如 jira 问题中所述:https://jira.springsource.org/browse/SPR-364

    但是实现 MessageSource 接口很简单,您甚至可以看到 jira 问题附带的示例实现:https://jira.springsource.org/secure/attachment/10261/JdbcMessageSource.java

    【讨论】:

      【解决方案2】:

      你可以试试Errors.rejectValue(String field, String errorCode, String defaultMessage) 方法。我也有同样的问题。就我而言,我使用了...errors.rejectValue("firstName", "error.firstName", "plz enter ur first name!!.");

      在无法从消息源中找到错误代码的情况下,最好使用defaultMessage

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        • 2015-03-17
        • 1970-01-01
        相关资源
        最近更新 更多