diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java index 8e7abe05fa0..accc34cd573 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/MessageSourceAutoConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.boot.autoconfigure; import java.io.IOException; +import java.nio.charset.Charset; import java.util.Iterator; import java.util.Set; @@ -68,7 +69,7 @@ public class MessageSourceAutoConfiguration { /** * Message bundles encoding. */ - private String encoding = "utf-8"; + private Charset encoding = Charset.forName("UTF-8"); /** * Loaded resource bundle files cache expiration, in seconds. When set to -1, bundles @@ -83,7 +84,7 @@ public class MessageSourceAutoConfiguration { messageSource .setBasenames(commaDelimitedListToStringArray(trimAllWhitespace(this.basename))); } - messageSource.setDefaultEncoding(this.encoding); + messageSource.setDefaultEncoding(this.encoding.name()); messageSource.setCacheSeconds(this.cacheSeconds); return messageSource; } @@ -96,11 +97,11 @@ public class MessageSourceAutoConfiguration { this.basename = basename; } - public String getEncoding() { + public Charset getEncoding() { return this.encoding; } - public void setEncoding(String encoding) { + public void setEncoding(Charset encoding) { this.encoding = encoding; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfiguration.java index f0e6c113ced..6251f232941 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerAutoConfiguration.java @@ -92,7 +92,7 @@ public class FreeMarkerAutoConfiguration { protected void applyProperties(FreeMarkerConfigurationFactory factory) { factory.setTemplateLoaderPaths(this.properties.getTemplateLoaderPath()); factory.setPreferFileSystemAccess(this.properties.isPreferFileSystemAccess()); - factory.setDefaultEncoding(this.properties.getCharset()); + factory.setDefaultEncoding(this.properties.getCharsetName()); Properties settings = new Properties(); settings.putAll(this.properties.getSettings()); factory.setFreemarkerSettings(settings); diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java index c0bcf36f7c8..e5d92d331bf 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java @@ -146,7 +146,9 @@ class DataSourceInitializer implements ApplicationListener map = new HashMap(); map.put("server.tomcat.uriEncoding", "US-ASCII"); bindProperties(map); - assertEquals("US-ASCII", this.properties.getTomcat().getUriEncoding()); + assertEquals(Charset.forName("US-ASCII"), this.properties.getTomcat().getUriEncoding()); } @Test diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java index 06f22ff4cfc..d76cc6ac028 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -89,6 +89,8 @@ import org.springframework.util.StringUtils; public class TomcatEmbeddedServletContainerFactory extends AbstractEmbeddedServletContainerFactory implements ResourceLoaderAware { + private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + private static final Set> NO_CLASSES = Collections.emptySet(); public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol"; @@ -111,7 +113,7 @@ public class TomcatEmbeddedServletContainerFactory extends private String tldSkip; - private String uriEncoding = "UTF-8"; + private Charset uriEncoding = DEFAULT_CHARSET; /** * Create a new {@link TomcatEmbeddedServletContainerFactory} instance. @@ -237,7 +239,7 @@ public class TomcatEmbeddedServletContainerFactory extends customizeProtocol((AbstractProtocol) connector.getProtocolHandler()); } if (getUriEncoding() != null) { - connector.setURIEncoding(getUriEncoding()); + connector.setURIEncoding(getUriEncoding().name()); } // If ApplicationContext is slow to start we want Tomcat not to bind to the socket @@ -614,7 +616,7 @@ public class TomcatEmbeddedServletContainerFactory extends * be used. * @param uriEncoding the uri encoding to set */ - public void setUriEncoding(String uriEncoding) { + public void setUriEncoding(Charset uriEncoding) { this.uriEncoding = uriEncoding; } @@ -622,7 +624,7 @@ public class TomcatEmbeddedServletContainerFactory extends * Returns the character encoding to use for URL decoding. * @return the URI encoding */ - public String getUriEncoding() { + public Charset getUriEncoding() { return this.uriEncoding; } diff --git a/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 560a8841e8b..2f233f71c61 100644 --- a/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -12,7 +12,7 @@ }, { "name": "banner.location", - "type": "java.lang.String", + "type": "org.springframework.core.io.Resource", "description": "Banner file location.", "defaultValue": "classpath:banner.txt" }, diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java index 829c17d1cad..6bf67189c22 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,7 @@ package org.springframework.boot.context.embedded.tomcat; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; +import java.nio.charset.Charset; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -226,7 +227,7 @@ public class TomcatEmbeddedServletContainerFactoryTests extends @Test public void uriEncoding() throws Exception { TomcatEmbeddedServletContainerFactory factory = getFactory(); - factory.setUriEncoding("US-ASCII"); + factory.setUriEncoding(Charset.forName("US-ASCII")); Tomcat tomcat = getTomcat(factory); assertEquals("US-ASCII", tomcat.getConnector().getURIEncoding()); }