当前位置: 首页 > 知识库问答 >
问题:

如何在不使用messages.properties?的情况下获取Spring mvc验证消息

诸俊才
2023-03-14

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

@Bean
public MessageSource messageSource() {

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

    return messageSource;
}

在Validator中,如果用户没有回答以下字段,我会添加一条验证消息:

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

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

required = {0} is required.

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

我的问题是-如何让Spring使用数据库而不是消息。属性?或者我确实使用消息。属性,只存储消息的id(数据库键),而不存储消息本身?

我对该做什么有几个想法——但不知道如何做任何一个。我“认为”Spring形式的标签库最终执行了获取实际消息的工作。也许我可以以某种方式拦截该调用?或者以某种方式将MessageSource更改为其他内容,而不是定义messages.properties文件。

不管怎样,有人有什么想法吗?

共有2个答案

楚钊
2023-03-14

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

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

袁何平
2023-03-14

您可以尝试Errors.rejectValue(String field, String errorCode, String defaultMessage)方法。我也有同样的问题。在我的例子中,我使用了...errors.rejectValue("firstName","error.firstName","plz Enter ur first name!!.");

理想情况下,这应该在无法从消息源中找到错误代码的情况下使用defaultMessage

 类似资料:
  • 首先,如果这是一个很长的代码段,我很抱歉,但是,我想做一个模态窗口,它将你在我的用户表单中写的东西写下来,并要求你确认它。我目前正在学习Javascript,我不允许使用innerHTML,我必须动态地编写“名字”等(名字的文本),不允许只在弹出窗口内写它。我已经让大多数东西工作,但“名字”“名字”等显示为“未定义”,或者(正如你可以看到的,我在这种情况下只用名字尝试的事情)显示为“空”。 希望有

  • 我有一个正在使用Azure AD身份验证的应用程序。我还需要访问Microsoft Graph API以获取用户数据。我发现的每个向Graph API发出请求的示例都使用了缓存的会话令牌,但由于我使用的是JWT,因此显然不需要存储会话状态。如何使用JWT将我的应用程序作为受众来获得具有适当受众的JWT? 例如,这里有一个从Microsoft Graph AspNetCore示例检索令牌的请求: 它

  • 我在JavaFX应用程序上通过hibernate-validation使用Java Beans验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中: 我发现这可以使<code>modelObject</code>得到验证: 我的问题是,每次验证时都创建一个新的工厂和验证器不好吗?我应该将它们缓存在某个地方并重复使用它们吗?验证器有多昂贵和多线程?

  • 我试图找到类似的问题,但找不到解决我问题的最佳方案。我在应用程序中使用SpringBoot,在代码中使用集成的solace队列。我可以使用以下代码读取solace队列中的消息: 在SpringBoot的帮助下,所有属性(如VPN)都从属性文件中提取,并创建ConnectionFactory。下面是读取消息的代码: 根据消息的类型,定位服务执行器并处理消息。它对我们完全有效。 但是,在某些情况下,我

  • 我正在创建一个简单的Spring REST应用程序,下面是我的Spring配置类; 这就是我在控制器类中所做的; 我已经在EmployeeModel中注释了我的姓名字段,如下所示; 这是我的messages.properties文件,在src/main/资源文件夹中。 但我无法读取此错误消息,我只收到@NotEmpty的默认消息。 我甚至尝试了以下配置; 请帮我拿这个!

  • 我需要对使用WebClient的类进行单元测试。有什么好方法来处理网络客户端吗?有了RestTemplate,我可以很容易地使用Mockito。模拟WebClient有点乏味,因为深度存根不适用于WebClient。。。 我想测试我的代码是否提供了正确的头。。。缩短的样本代码: