diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 56d89c2acd..fa171d6718 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -483,10 +483,20 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer, Ord if (handler instanceof AbstractHttp11Protocol) { @SuppressWarnings("rawtypes") AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) handler; - protocol.setCompression(Tomcat.this.compression); + protocol.setCompression(coerceCompression(Tomcat.this.compression)); protocol.setCompressableMimeTypes(Tomcat.this.compressableMimeTypes); } } + + private String coerceCompression(String compression) { + if (Boolean.toString(true).equals(compression)) { + return "on"; + } + else if (Boolean.toString(false).equals(compression)) { + return "off"; + } + return compression; + } }); if (this.accessLogEnabled) { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index bd2a13d065..5ce1f3d812 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -31,6 +31,8 @@ import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletCont import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -197,9 +199,26 @@ public class ServerPropertiesTests { @Test public void customTomcatCompression() throws Exception { + assertThat("on", is(equalTo(configureCompression("on")))); + } + + @Test + public void disableTomcatCompressionWithYaml() throws Exception { + // YAML interprets "off" as false, check that it's mapped back to off + assertThat("off", is(equalTo(configureCompression("false")))); + } + + @Test + public void enableTomcatCompressionWithYaml() throws Exception { + // YAML interprets "on" as true, check that it's mapped back to on + assertThat("on", is(equalTo(configureCompression("true")))); + } + + @Test + public void customTomcatCompressableMimeTypes() throws Exception { Map map = new HashMap(); map.put("server.port", "0"); - map.put("server.tomcat.compression", "on"); + map.put("server.tomcat.compressableMimeTypes", "application/foo"); bindProperties(map); TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); @@ -211,18 +230,23 @@ public class ServerPropertiesTests { try { AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) container .getTomcat().getConnector().getProtocolHandler(); - assertEquals("on", protocol.getCompression()); + assertEquals("application/foo", protocol.getCompressableMimeTypes()); } finally { container.stop(); } } - @Test - public void customTomcatCompressableMimeTypes() throws Exception { + private void bindProperties(Map map) { + new RelaxedDataBinder(this.properties, "server").bind(new MutablePropertyValues( + map)); + } + + private String configureCompression(String compression) { Map map = new HashMap(); map.put("server.port", "0"); - map.put("server.tomcat.compressableMimeTypes", "application/foo"); + // YAML interprets "on" as true + map.put("server.tomcat.compression", compression); bindProperties(map); TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); @@ -234,16 +258,11 @@ public class ServerPropertiesTests { try { AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) container .getTomcat().getConnector().getProtocolHandler(); - assertEquals("application/foo", protocol.getCompressableMimeTypes()); + return protocol.getCompression(); } finally { container.stop(); } } - private void bindProperties(Map map) { - new RelaxedDataBinder(this.properties, "server").bind(new MutablePropertyValues( - map)); - } - }