Java 弹簧靴惰性化

Java 弹簧靴惰性化,java,spring,spring-boot,Java,Spring,Spring Boot,我想在我的Spring Boot项目中添加一个messages_en_US文件,并用它填充Freemarker占位符。在以前的项目中,我自己设置配置(项目不在Spring Boot中),它工作正常 现在我在/src/main/resources文件夹下有messages_en_US.properties和messages_pl.properties文件,Spring向我抛出了一个异常: ---- FTL stack trace ("~" means nesting-related): -

我想在我的Spring Boot项目中添加一个messages_en_US文件,并用它填充Freemarker占位符。在以前的项目中,我自己设置配置(项目不在Spring Boot中),它工作正常

现在我在/src/main/resources文件夹下有messages_en_US.properties和messages_pl.properties文件,Spring向我抛出了一个异常:

----
FTL stack trace ("~" means nesting-related):
    - Failed at: ${springMacroRequestContext.getMessag...  [in template "spring.ftl" in macro "message" at line 28, column 22]
    - Reached through: @spring.message "title"  [in template "header.ftl" at line 17, column 9]
    - Reached through: #include "header.ftl"  [in template "index.ftl" at line 1, column 1]
----] with root cause

org.springframework.context.NoSuchMessageException: No message found under code 'title' for locale 'pl'.
    at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:69) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1232) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.REL
EASE]
    at org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:710) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:676) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_66]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_66]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_66]
    at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1458) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.ext.beans.ReflectionCallableMemberDescriptor.invokeMethod(ReflectionCallableMemberDescriptor.java:52) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.ext.beans.MemberAndArguments.invokeMethod(MemberAndArguments.java:48) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.ext.beans.OverloadedMethodsModel.exec(OverloadedMethodsModel.java:62) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.MethodCall._eval(MethodCall.java:62) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Expression.eval(Expression.java:78) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Expression.evalAndCoerceToString(Expression.java:82) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.DollarVariable.accept(DollarVariable.java:41) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Macro$Context.runMacro(Macro.java:184) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.invoke(Environment.java:701) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.MixedContent.accept(MixedContent.java:54) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.include(Environment.java:2072) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Include.accept(Include.java:167) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.MixedContent.accept(MixedContent.java:54) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.visit(Environment.java:324) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.core.Environment.process(Environment.java:302) ~[freemarker-2.3.23.jar:2.3.23]
    at freemarker.template.Template.process(Template.java:325) ~[freemarker-2.3.23.jar:2.3.23]
    at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:367) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:284) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:234) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RE
LEASE]
    at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.REL
EASE]
来吧,弹簧靴我敢打赌,SpringBoot已经有了国际化bean的配置,我不应该手动设置。我说得对吗?
也许我应该重命名我的邮件文件或将其放在另一个目录中?

好的,问题解决了。我必须添加messagesourcebean conf。接下来,我将语言环境文件放在/src/main/resources/locale文件夹中。现在它起作用了

消息源配置:

@Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("locale/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

您还必须在另2个旁边有一个
messages.properties
。另外,您是只使用自动配置还是手动设置?我还有messages.properties文件,但它是一个空文件。只要我们谈论的是消息和国际化,我就只使用自动配置。我实际上指的是MVC部件,比如free marker,或者你使用Spring Boot配置吗?是的。所有的东西都是由SpringBoot自动配置的,除了SpringSecurityconf,我覆盖了它。这是一个解决方案,而不是imho的解决方案。因为它应该像spring引导本身一样工作。
<#import "spring.ftl" as spring />
String SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE = "springMacroRequestContext";
model.put(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE,
                new RequestContext(request, response, 
                                            request.getSession().getServletContext()
                                            /*getServletContext()*/, model));