Spring MVC - 一个消息代码有效,另一个无效,两者都在同一个文件中

Spring MVC - one message code works, another not and both are in the same file

我收到此错误:

No message found under code 'DuplicateKey.user.username' for locale 'sk_SK'.

SO 上有很多关于消息文件加载不正确的问题,但我的问题是文件确实加载正确。在我的资源包中,我有两个文件: messages.properties messages_sk_SK.properties

messages_sk_SK.properties的内容是:

Size.user.username=Meno musi mat 5 az 80 znakov.
DuplicateKey.user.username=Uzivatel s takym menom uz existuje.

第一条消息正常。来自我的实体的代码:

@Size(min = 5, max = 80)
private String username;

第二个错误消息也是针对用户名的。这是来自我的控制器的代码:

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signupPost(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        return "signup";
    }

    user.setAuthority("user");
    user.setEnabled(true);

    try {
        userService.create(user);
    } catch (DuplicateKeyException e) {
        result.rejectValue("username", "DuplicateKey.user.username");
        return "signup";
    }

    return "accountcreated";
}

重复的用户名引发 DuplicateKeyException。这怎么可能?

好的,我解决了。根据我正在关注的教程中的评论 (link),您必须在 IntelliJ IDEA 中以另一种方式进行操作(他们在教程中使用 Eclipse)。我确实将消息文件移动到资源文件夹,所以现在我的目录结构是

src
  - main
    - java (sources)
    - resources (messages files)
    - webapp (WEB-INF, JSPs etc.)

在我的配置中 xml:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="messages"/>
</bean>

您必须右键单击资源目录并将目录标记为 -> 资源文件夹。消息文件应该出现在另一个名为 Resource Bundle 'messages' 的节点中。现在它可以正常工作了。如果它在 messages_sk_SK.properties 中找不到消息,它会尝试在 messages.properties 中找到它。