diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml
old mode 100644
new mode 100755
index c48f742d4e..dad3956b82
--- a/spring-boot-autoconfigure/pom.xml
+++ b/spring-boot-autoconfigure/pom.xml
@@ -588,5 +588,11 @@
snakeyaml
test
+
+ org.apache.tomcat.embed
+ tomcat-embed-jasper
+ ${tomcat.version}
+ test
+
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java
old mode 100644
new mode 100755
index 5d1ff661de..1716995926
--- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java
@@ -17,7 +17,9 @@
package org.springframework.boot.autoconfigure.web;
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
+import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertyResolver;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ClassUtils;
@@ -32,24 +34,17 @@ import org.springframework.util.ClassUtils;
public class JspTemplateAvailabilityProvider implements TemplateAvailabilityProvider {
@Override
- public boolean isTemplateAvailable(String view, Environment environment,
- ClassLoader classLoader, ResourceLoader resourceLoader) {
+ public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader, ResourceLoader resourceLoader) {
if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", classLoader)) {
- String prefix = getProperty(environment, "spring.mvc.view.prefix",
- "spring.view.prefix", WebMvcAutoConfiguration.DEFAULT_PREFIX);
- String suffix = getProperty(environment, "spring.mvc.view.suffix",
- "spring.view.suffix", WebMvcAutoConfiguration.DEFAULT_SUFFIX);
+ PropertyResolver resolver = new RelaxedPropertyResolver(environment,
+ "spring.mvc.view.");
+ String prefix = resolver.getProperty("prefix",
+ WebMvcAutoConfiguration.DEFAULT_PREFIX);
+ String suffix = resolver.getProperty("suffix",
+ WebMvcAutoConfiguration.DEFAULT_SUFFIX);
return resourceLoader.getResource(prefix + view + suffix).exists();
}
return false;
}
- private String getProperty(Environment environment, String key, String deprecatedKey,
- String defaultValue) {
- if (environment.containsProperty(key)) {
- return environment.getProperty(key);
- }
- return environment.getProperty(deprecatedKey, defaultValue);
- }
-
}
diff --git a/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTest.java b/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTest.java
new file mode 100755
index 0000000000..206c3f45f8
--- /dev/null
+++ b/spring-boot-samples/spring-boot-sample-actuator-ui/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2012-2015 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.autoconfigure.web;
+
+import org.junit.Test;
+import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.mock.env.MockEnvironment;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests for {@link JspTemplateAvailabilityProvider}.
+ *
+ * @author Yunkun Huang
+ */
+public class JspTemplateAvailabilityProviderTest {
+ private final TemplateAvailabilityProvider provider = new JspTemplateAvailabilityProvider();
+
+ private final ResourceLoader resourceLoader = new DefaultResourceLoader();
+
+ private final MockEnvironment environment = new MockEnvironment();
+
+ @Test
+ public void availabilityOfTemplateThatDoesNotExist() {
+ assertFalse(this.provider.isTemplateAvailable("whatever", this.environment,
+ getClass().getClassLoader(), this.resourceLoader));
+ }
+
+ @Test
+ public void availabilityOfTemplateWithCustomPrefix() {
+ this.environment.setProperty("spring.mvc.view.prefix",
+ "classpath:/custom-templates/");
+
+ assertTrue(this.provider.isTemplateAvailable("custom.jsp", this.environment,
+ getClass().getClassLoader(), this.resourceLoader));
+ }
+
+ @Test
+ public void availabilityOfTemplateWithCustomSuffix() {
+ this.environment.setProperty("spring.mvc.view.prefix", "classpath:/custom-templates/");
+ this.environment.setProperty("spring.mvc.view.suffix", ".jsp");
+
+ assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment,
+ getClass().getClassLoader(), this.resourceLoader));
+ }
+
+ @Test
+ public void notAvailabilityOfTemplateWithCustomSuffixViaDeprecatedKey() {
+ this.environment.setProperty("spring.mvc.view.prefix", "classpath:/custom-templates/");
+ this.environment.setProperty("spring.view.suffix", ".jsp");
+
+ assertFalse(this.provider.isTemplateAvailable("suffixed", this.environment,
+ getClass().getClassLoader(), this.resourceLoader));
+ }
+}
diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/test/resources/custom-templates/custom.jsp b/spring-boot-samples/spring-boot-sample-data-rest/src/test/resources/custom-templates/custom.jsp
new file mode 100755
index 0000000000..e69de29bb2
diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/test/resources/custom-templates/suffixed.jsp b/spring-boot-samples/spring-boot-sample-data-rest/src/test/resources/custom-templates/suffixed.jsp
new file mode 100755
index 0000000000..e69de29bb2