Add spring.thymeleaf.encoding to ThymeleafAutoConfiguration

Both the template resolver and the view resolver now have their
encoding set explicitly (defaulting to UTF-8).

Fixes gh-79
This commit is contained in:
Dave Syer 2013-10-10 09:58:05 -04:00
parent 2c60828cf2
commit 0ec2d19e38
2 changed files with 34 additions and 2 deletions

View File

@ -100,6 +100,8 @@ public class ThymeleafAutoConfiguration {
"classpath:/templates/"));
resolver.setSuffix(this.environment.getProperty("suffix", ".html"));
resolver.setTemplateMode(this.environment.getProperty("mode", "HTML5"));
resolver.setCharacterEncoding(this.environment.getProperty("encoding",
"UTF-8"));
resolver.setCacheable(this.environment.getProperty("cache", Boolean.class,
true));
return resolver;
@ -144,7 +146,15 @@ public class ThymeleafAutoConfiguration {
@Configuration
@ConditionalOnClass({ Servlet.class })
protected static class ThymeleafViewResolverConfiguration {
protected static class ThymeleafViewResolverConfiguration implements EnvironmentAware {
private RelaxedPropertyResolver environment;
@Override
public void setEnvironment(Environment environment) {
this.environment = new RelaxedPropertyResolver(environment,
"spring.thymeleaf.");
}
@Autowired
private SpringTemplateEngine templateEngine;
@ -154,7 +164,8 @@ public class ThymeleafAutoConfiguration {
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(this.templateEngine);
resolver.setCharacterEncoding("UTF-8");
resolver.setCharacterEncoding(this.environment.getProperty("encoding",
"UTF-8"));
// Needs to come before any fallback resolver (e.g. a
// InternalResourceViewResolver)
resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 20);

View File

@ -34,6 +34,8 @@ import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring3.view.ThymeleafView;
import org.thymeleaf.spring3.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@ -63,6 +65,25 @@ public class ThymeleafAutoConfigurationTests {
context.close();
}
@Test
public void overrideCharacterEncoding() throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(ThymeleafAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("spring.thymeleaf.encoding", "UTF-16");
context.getEnvironment().getPropertySources()
.addFirst(new MapPropertySource("test", map));
context.refresh();
context.getBean(TemplateEngine.class).initialize();
ITemplateResolver resolver = context.getBean(ITemplateResolver.class);
assertTrue(resolver instanceof TemplateResolver);
assertEquals("UTF-16", ((TemplateResolver) resolver).getCharacterEncoding());
ThymeleafViewResolver views = context.getBean(ThymeleafViewResolver.class);
assertEquals("UTF-16", views.getCharacterEncoding());
context.close();
}
@Test
public void createLayoutFromConfigClass() throws Exception {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();