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