Merge branch '2.4.x'

Closes gh-25787
pull/25805/head
Phillip Webb 4 years ago
commit 02a6de4498

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -252,7 +252,7 @@ public class DefaultErrorWebExceptionHandler extends AbstractErrorWebExceptionHa
return (serverRequest) -> { return (serverRequest) -> {
try { try {
List<MediaType> acceptedMediaTypes = serverRequest.headers().accept(); List<MediaType> acceptedMediaTypes = serverRequest.headers().accept();
acceptedMediaTypes.remove(MediaType.ALL); acceptedMediaTypes.removeIf(MediaType.ALL::equalsTypeAndSubtype);
MediaType.sortBySpecificityAndQuality(acceptedMediaTypes); MediaType.sortBySpecificityAndQuality(acceptedMediaTypes);
return acceptedMediaTypes.stream().anyMatch(MediaType.TEXT_HTML::isCompatibleWith); return acceptedMediaTypes.stream().anyMatch(MediaType.TEXT_HTML::isCompatibleWith);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,6 +17,7 @@
package org.springframework.boot.autoconfigure.web.reactive.error; package org.springframework.boot.autoconfigure.web.reactive.error;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -28,9 +29,12 @@ import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWeb
import org.springframework.boot.web.reactive.error.ErrorAttributes; import org.springframework.boot.web.reactive.error.ErrorAttributes;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.codec.HttpMessageReader;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
import org.springframework.mock.web.server.MockServerWebExchange; import org.springframework.mock.web.server.MockServerWebExchange;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.result.view.View; import org.springframework.web.reactive.result.view.View;
import org.springframework.web.reactive.result.view.ViewResolver; import org.springframework.web.reactive.result.view.ViewResolver;
import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.ServerWebExchange;
@ -42,7 +46,7 @@ import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
/** /**
* Tests for {@link AbstractErrorWebExceptionHandler}. * Tests for {@link DefaultErrorWebExceptionHandler}.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Madhura Bhave * @author Madhura Bhave
@ -62,10 +66,10 @@ class DefaultErrorWebExceptionHandlerTests {
@Test @Test
void nonStandardErrorStatusCodeShouldNotFail() { void nonStandardErrorStatusCodeShouldNotFail() {
ErrorAttributes errorAttributes = mock(ErrorAttributes.class); ErrorAttributes errorAttributes = mock(ErrorAttributes.class);
given(errorAttributes.getErrorAttributes(any(), any())).willReturn(getErrorAttributes());
Resources resourceProperties = new Resources(); Resources resourceProperties = new Resources();
ErrorProperties errorProperties = new ErrorProperties(); ErrorProperties errorProperties = new ErrorProperties();
ApplicationContext context = new AnnotationConfigReactiveWebApplicationContext(); ApplicationContext context = new AnnotationConfigReactiveWebApplicationContext();
given(errorAttributes.getErrorAttributes(any(), any())).willReturn(getErrorAttributes());
DefaultErrorWebExceptionHandler exceptionHandler = new DefaultErrorWebExceptionHandler(errorAttributes, DefaultErrorWebExceptionHandler exceptionHandler = new DefaultErrorWebExceptionHandler(errorAttributes,
resourceProperties, errorProperties, context); resourceProperties, errorProperties, context);
setupViewResolver(exceptionHandler); setupViewResolver(exceptionHandler);
@ -86,4 +90,20 @@ class DefaultErrorWebExceptionHandlerTests {
exceptionHandler.setViewResolvers(Collections.singletonList(viewResolver)); exceptionHandler.setViewResolvers(Collections.singletonList(viewResolver));
} }
@Test
void acceptsTextHtmlShouldNotConsiderMediaAllEvenWithQuality() {
ErrorAttributes errorAttributes = mock(ErrorAttributes.class);
Resources resourceProperties = new Resources();
ErrorProperties errorProperties = new ErrorProperties();
ApplicationContext context = new AnnotationConfigReactiveWebApplicationContext();
DefaultErrorWebExceptionHandler exceptionHandler = new DefaultErrorWebExceptionHandler(errorAttributes,
resourceProperties, errorProperties, context);
MediaType allWithQuality = new MediaType(MediaType.ALL.getType(), MediaType.ALL.getSubtype(), 0.9);
MockServerWebExchange exchange = MockServerWebExchange
.from(MockServerHttpRequest.get("/test").accept(allWithQuality));
List<HttpMessageReader<?>> readers = ServerCodecConfigurer.create().getReaders();
ServerRequest request = ServerRequest.create(exchange, readers);
assertThat(exceptionHandler.acceptsTextHtml().test(request)).isFalse();
}
} }

Loading…
Cancel
Save