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,25 +199,19 @@ public class ServerPropertiesTests { @Test public void customTomcatCompression() throws Exception { - Map map = new HashMap(); - map.put("server.port", "0"); - map.put("server.tomcat.compression", "on"); - bindProperties(map); + assertThat("on", is(equalTo(configureCompression("on")))); + } - TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); - this.properties.customize(factory); + @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")))); + } - TomcatEmbeddedServletContainer container = (TomcatEmbeddedServletContainer) factory - .getEmbeddedServletContainer(); - - try { - AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) container - .getTomcat().getConnector().getProtocolHandler(); - assertEquals("on", protocol.getCompression()); - } - finally { - container.stop(); - } + @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 @@ -246,4 +242,27 @@ public class ServerPropertiesTests { map)); } + private String configureCompression(String compression) { + Map map = new HashMap(); + map.put("server.port", "0"); + // YAML interprets "on" as true + map.put("server.tomcat.compression", compression); + bindProperties(map); + + TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); + this.properties.customize(factory); + + TomcatEmbeddedServletContainer container = (TomcatEmbeddedServletContainer) factory + .getEmbeddedServletContainer(); + + try { + AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) container + .getTomcat().getConnector().getProtocolHandler(); + return protocol.getCompression(); + } + finally { + container.stop(); + } + } + }