You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Validation消息无法插值问题求助:验证消息与国际化配置疑问

Spring Validation Message Not Resolving (Shows {m1} Instead of Internationalized Text)

我碰到过好多次这种情况,问题大概率出在消息源的路径配置或者Spring验证组件与消息源的绑定上,咱们一步步来排查解决:

1. 修正messageSource的资源文件路径

你的ResourceBundleMessageSource配置里,basenames设成了resources/messages,这大概率是核心问题所在。

如果你的messages.properties和messages_it.properties是放在Maven/Gradle项目默认的src/main/resources目录下,编译后这些文件会直接放在classpath的根目录里。而ResourceBundleMessageSource默认从classpath根目录加载资源,所以你需要把basenames改成messages即可。

修改后的配置:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="messages"/>
    <!-- 建议加上编码配置,避免中文/特殊字符乱码 -->
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

如果你的资源文件确实是放在src/main/resources/resources子目录下,那保持resources/messages是对的,但这种情况比较少见,优先确认文件实际位置。

2. 确保Spring MVC自动绑定验证器与消息源

你已经配置了<mvc:annotation-driven/>,这个标签会自动注册LocalValidatorFactoryBean——它会自动查找id为messageSource的Bean来解析验证消息,所以这部分配置是没问题的,只要消息源路径正确,验证器就能拿到对应的消息文本。

3. (可选)配置国际化支持(如果需要切换语言)

如果希望用户能切换Locale(比如从英文切到意大利语),还需要添加LocaleResolver和对应的拦截器:

<!-- 会话级Locale解析器,默认用英文 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="en"/>
</bean>

<!-- 允许通过URL参数?lang=it切换Locale -->
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang"/>
    </bean>
</mvc:interceptors>

4. 确保视图正确显示错误消息

在JSP页面里,要使用Spring的form标签来显示错误,这样才能自动解析消息代码:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<form:form modelAttribute="customer" action="/submit-customer" method="post">
    <div>
        <label>First Name:</label>
        <form:input path="firstName"/>
        <!-- 这里会自动解析{m1}为对应的消息文本 -->
        <form:errors path="firstName" cssClass="error-text"/>
    </div>
    <button type="submit">Submit</button>
</form:form>

做完这些调整后,提交空的firstName字段,应该就能看到Not valid(默认英文Locale)或者Non valido(切换到意大利语后)的错误消息了。

内容的提问来源于stack exchange,提问作者CodeRonin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:27:27