diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java index ca31a0c36a..fc103d5530 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 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. @@ -220,6 +220,7 @@ public class WebMvcAutoConfiguration { } @Override + @SuppressWarnings("deprecation") public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseSuffixPatternMatch(this.mvcProperties.getPathmatch().isUseSuffixPattern()); configurer.setUseRegisteredSuffixPatternMatch( @@ -227,6 +228,7 @@ public class WebMvcAutoConfiguration { } @Override + @SuppressWarnings("deprecation") public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { WebMvcProperties.Contentnegotiation contentnegotiation = this.mvcProperties.getContentnegotiation(); configurer.favorPathExtension(contentnegotiation.isFavorPathExtension()); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcProperties.java index fa34062be0..5e4581ac68 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcProperties.java @@ -22,6 +22,7 @@ import java.util.Locale; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.validation.DefaultMessageCodesResolver; @@ -366,10 +367,14 @@ public class WebMvcProperties { */ private String parameterName; + @DeprecatedConfigurationProperty( + reason = "Use of path extensions for request mapping and for content negotiation is discouraged.") + @Deprecated public boolean isFavorPathExtension() { return this.favorPathExtension; } + @Deprecated public void setFavorPathExtension(boolean favorPathExtension) { this.favorPathExtension = favorPathExtension; } @@ -416,18 +421,26 @@ public class WebMvcProperties { */ private boolean useRegisteredSuffixPattern = false; + @DeprecatedConfigurationProperty( + reason = "Use of path extensions for request mapping and for content negotiation is discouraged.") + @Deprecated public boolean isUseSuffixPattern() { return this.useSuffixPattern; } + @Deprecated public void setUseSuffixPattern(boolean useSuffixPattern) { this.useSuffixPattern = useSuffixPattern; } + @DeprecatedConfigurationProperty( + reason = "Use of path extensions for request mapping and for content negotiation is discouraged.") + @Deprecated public boolean isUseRegisteredSuffixPattern() { return this.useRegisteredSuffixPattern; } + @Deprecated public void setUseRegisteredSuffixPattern(boolean useRegisteredSuffixPattern) { this.useRegisteredSuffixPattern = useRegisteredSuffixPattern; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java index 7f7790e21e..a4a53fe64e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java @@ -431,6 +431,7 @@ class WebMvcAutoConfigurationTests { } @Test + @Deprecated void customMediaTypes() { this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.media-types.yaml:text/yaml", "spring.mvc.contentnegotiation.favor-path-extension:true").run((context) -> { @@ -685,6 +686,7 @@ class WebMvcAutoConfigurationTests { } @Test + @Deprecated void useSuffixPatternMatch() { this.contextRunner.withPropertyValues("spring.mvc.pathmatch.use-suffix-pattern:true", "spring.mvc.pathmatch.use-registered-suffix-pattern:true").run((context) -> { @@ -705,6 +707,7 @@ class WebMvcAutoConfigurationTests { } @Test + @Deprecated void pathExtensionContentNegotiation() { this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.favor-path-extension:true") .run((context) -> { @@ -716,6 +719,7 @@ class WebMvcAutoConfigurationTests { } @Test + @Deprecated void queryParameterContentNegotiation() { this.contextRunner.withPropertyValues("spring.mvc.contentnegotiation.favor-parameter:true").run((context) -> { RequestMappingHandlerMapping handlerMapping = context.getBean(RequestMappingHandlerMapping.class); diff --git a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc index 97e5fcd1ff..504f437b72 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/spring-boot-features.adoc @@ -2315,6 +2315,7 @@ Instead of using suffix matching, we can use a query parameter to ensure that re spring.mvc.contentnegotiation.media-types.markdown=text/markdown ---- +Suffix pattern matching is deprecated and will be removed in a future release. If you understand the caveats and would still like your application to use suffix pattern matching, the following configuration is required: [source,properties,indent=0,subs="verbatim,quotes,attributes",configprops]