Skip to content

Commit 9947336

Browse files
committed
Merge branch '2.7.x' into 3.0.x
Closes gh-37456
2 parents c7604b7 + 95690f7 commit 9947336

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WelcomePageHandlerMapping.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.core.io.Resource;
2929
import org.springframework.core.log.LogMessage;
3030
import org.springframework.http.HttpHeaders;
31+
import org.springframework.http.InvalidMediaTypeException;
3132
import org.springframework.http.MediaType;
3233
import org.springframework.util.StringUtils;
3334
import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
@@ -40,6 +41,7 @@
4041
*
4142
* @author Andy Wilkinson
4243
* @author Bruce Brouwer
44+
* @author Moritz Halbritter
4345
* @see WelcomePageNotAcceptableHandlerMapping
4446
*/
4547
final class WelcomePageHandlerMapping extends AbstractUrlHandlerMapping {
@@ -79,7 +81,13 @@ private boolean isHtmlTextAccepted(HttpServletRequest request) {
7981
private List<MediaType> getAcceptedMediaTypes(HttpServletRequest request) {
8082
String acceptHeader = request.getHeader(HttpHeaders.ACCEPT);
8183
if (StringUtils.hasText(acceptHeader)) {
82-
return MediaType.parseMediaTypes(acceptHeader);
84+
try {
85+
return MediaType.parseMediaTypes(acceptHeader);
86+
}
87+
catch (InvalidMediaTypeException ex) {
88+
logger.warn("Received invalid Accept header. Assuming all media types are accepted",
89+
logger.isDebugEnabled() ? ex : null);
90+
}
8391
}
8492
return MEDIA_TYPES_ALL;
8593
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WelcomePageHandlerMappingTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import jakarta.servlet.http.HttpServletRequest;
2323
import jakarta.servlet.http.HttpServletResponse;
2424
import org.junit.jupiter.api.Test;
25+
import org.junit.jupiter.api.extension.ExtendWith;
2526

2627
import org.springframework.beans.factory.ObjectProvider;
2728
import org.springframework.beans.factory.annotation.Value;
@@ -30,6 +31,8 @@
3031
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
3132
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders;
3233
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
34+
import org.springframework.boot.test.system.CapturedOutput;
35+
import org.springframework.boot.test.system.OutputCaptureExtension;
3336
import org.springframework.context.ApplicationContext;
3437
import org.springframework.context.annotation.Bean;
3538
import org.springframework.context.annotation.Configuration;
@@ -53,7 +56,9 @@
5356
* Tests for {@link WelcomePageHandlerMapping}.
5457
*
5558
* @author Andy Wilkinson
59+
* @author Moritz Halbritter
5660
*/
61+
@ExtendWith(OutputCaptureExtension.class)
5762
class WelcomePageHandlerMappingTests {
5863

5964
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
@@ -163,6 +168,17 @@ void prefersAStaticResourceToATemplate() {
163168
});
164169
}
165170

171+
@Test
172+
void logsInvalidAcceptHeader(CapturedOutput output) {
173+
this.contextRunner.withUserConfiguration(TemplateConfiguration.class).run((context) -> {
174+
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
175+
mockMvc.perform(get("/").accept("*/*q=0.8"))
176+
.andExpect(status().isOk())
177+
.andExpect(content().string("index template"));
178+
});
179+
assertThat(output).contains("Received invalid Accept header. Assuming all media types are accepted");
180+
}
181+
166182
@Configuration(proxyBeanMethods = false)
167183
static class HandlerMappingConfiguration {
168184

0 commit comments

Comments
 (0)