Use HttpStatusCode interface

This commit contains changes made because of the introduction of
HttpStatusCode. In general, methods that used to return a HttpStatus
now return HttpStatusCode instead, and methods that returned raw status
codes are now deprecated.

See gh-28214
This commit is contained in:
Arjen Poutsma
2022-03-17 14:21:04 +01:00
parent ca4b6e86a4
commit 28ac0d3883
143 changed files with 1064 additions and 950 deletions

View File

@@ -28,12 +28,12 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseCookie;
import org.springframework.web.testfixture.http.client.reactive.MockClientHttpRequest;
import org.springframework.web.testfixture.http.client.reactive.MockClientHttpResponse;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
/**
* @author Arjen Poutsma
@@ -106,6 +106,6 @@ public class DefaultClientResponseBuilderTests {
ClientResponse result = other.mutate().build();
assertThat(result.rawStatusCode()).isEqualTo(499);
assertThatIllegalArgumentException().isThrownBy(result::statusCode);
assertThat(result.statusCode()).isEqualTo(HttpStatusCode.valueOf(499));
}
}

View File

@@ -39,6 +39,7 @@ import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRange;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseCookie;
import org.springframework.http.ResponseEntity;
@@ -49,7 +50,6 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.entry;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
@@ -233,8 +233,7 @@ public class DefaultClientResponseTests {
httpHeaders.setContentType(MediaType.TEXT_PLAIN);
given(mockResponse.getHeaders()).willReturn(httpHeaders);
given(mockResponse.getStatusCode()).willThrow(new IllegalArgumentException("999"));
given(mockResponse.getRawStatusCode()).willReturn(999);
given(mockResponse.getStatusCode()).willReturn(HttpStatusCode.valueOf(999));
given(mockResponse.getBody()).willReturn(body);
List<HttpMessageReader<?>> messageReaders = Collections
@@ -243,8 +242,7 @@ public class DefaultClientResponseTests {
ResponseEntity<String> result = defaultClientResponse.toEntity(String.class).block();
assertThat(result.getBody()).isEqualTo("foo");
assertThatIllegalArgumentException().isThrownBy(
result::getStatusCode);
assertThat(result.getStatusCode()).isEqualTo(HttpStatusCode.valueOf(999));
assertThat(result.getStatusCodeValue()).isEqualTo(999);
assertThat(result.getHeaders().getContentType()).isEqualTo(MediaType.TEXT_PLAIN);
}
@@ -295,8 +293,7 @@ public class DefaultClientResponseTests {
httpHeaders.setContentType(MediaType.TEXT_PLAIN);
given(mockResponse.getHeaders()).willReturn(httpHeaders);
given(mockResponse.getStatusCode()).willThrow(new IllegalArgumentException("999"));
given(mockResponse.getRawStatusCode()).willReturn(999);
given(mockResponse.getStatusCode()).willReturn(HttpStatusCode.valueOf(999));
given(mockResponse.getBody()).willReturn(body);
List<HttpMessageReader<?>> messageReaders = Collections
@@ -305,8 +302,7 @@ public class DefaultClientResponseTests {
ResponseEntity<List<String>> result = defaultClientResponse.toEntityList(String.class).block();
assertThat(result.getBody()).isEqualTo(Collections.singletonList("foo"));
assertThatIllegalArgumentException().isThrownBy(
result::getStatusCode);
assertThat(result.getStatusCode()).isEqualTo(HttpStatusCode.valueOf(999));
assertThat(result.getStatusCodeValue()).isEqualTo(999);
assertThat(result.getHeaders().getContentType()).isEqualTo(MediaType.TEXT_PLAIN);
}

View File

@@ -38,6 +38,7 @@ import org.springframework.core.NamedThreadLocal;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ClientCodecConfigurer;
import org.springframework.web.reactive.function.BodyExtractors;
@@ -73,6 +74,7 @@ public class DefaultWebClientTests {
@BeforeEach
public void setup() {
ClientResponse mockResponse = mock(ClientResponse.class);
when(mockResponse.statusCode()).thenReturn(HttpStatus.OK);
when(mockResponse.bodyToMono(Void.class)).thenReturn(Mono.empty());
given(this.exchangeFunction.exchange(this.captor.capture())).willReturn(Mono.just(mockResponse));
this.builder = WebClient.builder().baseUrl("/base").exchangeFunction(this.exchangeFunction);
@@ -414,8 +416,8 @@ public class DefaultWebClientTests {
Mono<Void> result = this.builder.build().get()
.uri("/path")
.retrieve()
.onStatus(HttpStatus::is4xxClientError, resp -> Mono.error(new IllegalStateException("1")))
.onStatus(HttpStatus::is4xxClientError, resp -> Mono.error(new IllegalStateException("2")))
.onStatus(HttpStatusCode::is4xxClientError, resp -> Mono.error(new IllegalStateException("1")))
.onStatus(HttpStatusCode::is4xxClientError, resp -> Mono.error(new IllegalStateException("2")))
.bodyToMono(Void.class);
StepVerifier.create(result).expectErrorMessage("1").verify();
@@ -428,8 +430,8 @@ public class DefaultWebClientTests {
ClientResponse response = ClientResponse.create(HttpStatus.BAD_REQUEST).build();
given(exchangeFunction.exchange(any())).willReturn(Mono.just(response));
Predicate<HttpStatus> predicate1 = mock(Predicate.class);
Predicate<HttpStatus> predicate2 = mock(Predicate.class);
Predicate<HttpStatusCode> predicate1 = mock(Predicate.class);
Predicate<HttpStatusCode> predicate2 = mock(Predicate.class);
given(predicate1.test(HttpStatus.BAD_REQUEST)).willReturn(false);
given(predicate2.test(HttpStatus.BAD_REQUEST)).willReturn(false);

View File

@@ -30,6 +30,7 @@ import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.web.reactive.function.BodyExtractors;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -170,7 +171,7 @@ public class ExchangeFilterFunctionsTests {
ExchangeFunction exchange = r -> Mono.just(response);
ExchangeFilterFunction errorHandler = ExchangeFilterFunctions.statusError(
HttpStatus::is4xxClientError, r -> new MyException());
HttpStatusCode::is4xxClientError, r -> new MyException());
Mono<ClientResponse> result = errorHandler.filter(request, exchange);
@@ -186,7 +187,7 @@ public class ExchangeFilterFunctionsTests {
given(response.statusCode()).willReturn(HttpStatus.NOT_FOUND);
Mono<ClientResponse> result = ExchangeFilterFunctions
.statusError(HttpStatus::is5xxServerError, req -> new MyException())
.statusError(HttpStatusCode::is5xxServerError, req -> new MyException())
.filter(request, req -> Mono.just(response));
StepVerifier.create(result)

View File

@@ -64,6 +64,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpRequest;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseCookie;
import org.springframework.http.ResponseEntity;
@@ -741,7 +742,7 @@ class WebClientIntegrationTests {
Mono<String> result = this.webClient.get()
.uri("/greeting")
.retrieve()
.onStatus(HttpStatus::is5xxServerError, response -> Mono.just(new MyException("500 error!")))
.onStatus(HttpStatusCode::is5xxServerError, response -> Mono.just(new MyException("500 error!")))
.bodyToMono(String.class);
StepVerifier.create(result)
@@ -765,7 +766,7 @@ class WebClientIntegrationTests {
Mono<String> result = this.webClient.get()
.uri("/greeting")
.retrieve()
.onStatus(HttpStatus::is5xxServerError, response -> Mono.just(new MyException("500 error!")))
.onStatus(HttpStatusCode::is5xxServerError, response -> Mono.just(new MyException("500 error!")))
.bodyToMono(new ParameterizedTypeReference<String>() {});
StepVerifier.create(result)
@@ -792,7 +793,7 @@ class WebClientIntegrationTests {
Mono<String> result = this.webClient.get()
.uri("/json")
.retrieve()
.onStatus(HttpStatus::isError,
.onStatus(HttpStatusCode::isError,
response -> response.bodyToMono(Pojo.class)
.flatMap(pojo -> Mono.error(new MyException(pojo.getFoo())))
)
@@ -841,7 +842,7 @@ class WebClientIntegrationTests {
Mono<String> result = this.webClient.get()
.uri("/greeting")
.retrieve()
.onStatus(HttpStatus::is5xxServerError, response -> Mono.empty())
.onStatus(HttpStatusCode::is5xxServerError, response -> Mono.empty())
.bodyToMono(String.class);
StepVerifier.create(result)
@@ -865,7 +866,7 @@ class WebClientIntegrationTests {
Flux<String> result = this.webClient.get()
.uri("/greeting")
.retrieve()
.onStatus(HttpStatus::is5xxServerError, response -> Mono.empty())
.onStatus(HttpStatusCode::is5xxServerError, response -> Mono.empty())
.bodyToFlux(String.class);
StepVerifier.create(result)
@@ -890,7 +891,7 @@ class WebClientIntegrationTests {
Mono<ResponseEntity<String>> result = this.webClient.get()
.uri("/").accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(HttpStatus::is5xxServerError, response -> Mono.empty())// use normal response
.onStatus(HttpStatusCode::is5xxServerError, response -> Mono.empty())// use normal response
.toEntity(String.class);
StepVerifier.create(result)

View File

@@ -27,6 +27,7 @@ import reactor.test.StepVerifier;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.MediaType;
import org.springframework.web.testfixture.http.server.reactive.MockServerHttpRequest;
import org.springframework.web.testfixture.server.MockServerWebExchange;
@@ -50,13 +51,12 @@ public class RouterFunctionBuilderTests {
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://example.com/foo").build();
ServerRequest getRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> responseMono = route.route(getRequest)
Mono<HttpStatusCode> responseMono = route.route(getRequest)
.flatMap(handlerFunction -> handlerFunction.handle(getRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.expectNext(200)
.expectNext(HttpStatus.OK)
.verifyComplete();
mockRequest = MockServerHttpRequest.head("https://example.com/foo").build();
@@ -65,11 +65,10 @@ public class RouterFunctionBuilderTests {
responseMono = route.route(headRequest)
.flatMap(handlerFunction -> handlerFunction.handle(headRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.expectNext(202)
.expectNext(HttpStatus.ACCEPTED)
.verifyComplete();
mockRequest = MockServerHttpRequest.post("https://example.com/").
@@ -79,11 +78,10 @@ public class RouterFunctionBuilderTests {
responseMono = route.route(barRequest)
.flatMap(handlerFunction -> handlerFunction.handle(barRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.expectNext(204)
.expectNext(HttpStatus.NO_CONTENT)
.verifyComplete();
mockRequest = MockServerHttpRequest.post("https://example.com/").build();
@@ -92,8 +90,7 @@ public class RouterFunctionBuilderTests {
responseMono = route.route(invalidRequest)
.flatMap(handlerFunction -> handlerFunction.handle(invalidRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.verifyComplete();
@@ -112,13 +109,12 @@ public class RouterFunctionBuilderTests {
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://localhost/resources/response.txt").build();
ServerRequest resourceRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> responseMono = route.route(resourceRequest)
Mono<HttpStatusCode> responseMono = route.route(resourceRequest)
.flatMap(handlerFunction -> handlerFunction.handle(resourceRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.expectNext(200)
.expectNext(HttpStatus.OK)
.verifyComplete();
mockRequest = MockServerHttpRequest.post("https://localhost/resources/foo.txt").build();
@@ -126,8 +122,7 @@ public class RouterFunctionBuilderTests {
responseMono = route.route(invalidRequest)
.flatMap(handlerFunction -> handlerFunction.handle(invalidRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.verifyComplete();
@@ -146,13 +141,12 @@ public class RouterFunctionBuilderTests {
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://localhost/foo/bar/baz").build();
ServerRequest fooRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> responseMono = route.route(fooRequest)
Mono<HttpStatusCode> responseMono = route.route(fooRequest)
.flatMap(handlerFunction -> handlerFunction.handle(fooRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(responseMono)
.expectNext(200)
.expectNext(HttpStatus.OK)
.verifyComplete();
}
@@ -201,13 +195,12 @@ public class RouterFunctionBuilderTests {
mockRequest = MockServerHttpRequest.get("https://localhost/bar").build();
ServerRequest barRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<Integer> barResponseMono = route.route(barRequest)
Mono<HttpStatusCode> barResponseMono = route.route(barRequest)
.flatMap(handlerFunction -> handlerFunction.handle(barRequest))
.map(ServerResponse::statusCode)
.map(HttpStatus::value);
.map(ServerResponse::statusCode);
StepVerifier.create(barResponseMono)
.expectNext(500)
.expectNext(HttpStatus.INTERNAL_SERVER_ERROR)
.verifyComplete();
}
@@ -222,7 +215,7 @@ public class RouterFunctionBuilderTests {
MockServerHttpRequest mockRequest = MockServerHttpRequest.get("https://example.com/error").build();
ServerRequest serverRequest = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList());
Mono<HttpStatus> responseStatus = route.route(serverRequest)
Mono<HttpStatusCode> responseStatus = route.route(serverRequest)
.flatMap(handlerFunction -> handlerFunction.handle(serverRequest))
.map(ServerResponse::statusCode);

View File

@@ -21,6 +21,7 @@ import reactor.core.publisher.Mono;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.server.reactive.HttpHandler;
@@ -63,7 +64,7 @@ class DispatcherHandlerIntegrationTests extends AbstractHttpHandlerIntegrationTe
ResponseEntity<String> result = this.restTemplate
.getForEntity("http://localhost:" + this.port + "/foo/bar", String.class);
assertThat(result.getStatusCodeValue()).isEqualTo(200);
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
}

View File

@@ -329,7 +329,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(handler.handle(exchange))
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}).verify(TIMEOUT);
}
@@ -375,7 +375,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(this.handler.handle(exchange))
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
})
.verify(TIMEOUT);
if (!location.createRelative(requestPath).exists() && !requestPath.contains(":")) {
@@ -470,7 +470,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(this.handler.handle(exchange))
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}).verify(TIMEOUT);
}
@@ -481,7 +481,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(this.handler.handle(exchange))
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}).verify(TIMEOUT);
}
@@ -492,7 +492,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(this.handler.handle(exchange))
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}).verify(TIMEOUT);
}
@@ -527,7 +527,7 @@ public class ResourceWebHandlerTests {
StepVerifier.create(mono)
.expectErrorSatisfies(err -> {
assertThat(err).isInstanceOf(ResponseStatusException.class);
assertThat(((ResponseStatusException) err).getRawStatusCode()).isEqualTo(404);
assertThat(((ResponseStatusException) err).getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}).verify(TIMEOUT);
// SPR-17475

View File

@@ -29,6 +29,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
@@ -103,7 +104,7 @@ class RequestMappingExceptionHandlingIntegrationTests extends AbstractRequestMap
assertThatExceptionOfType(HttpStatusCodeException.class).isThrownBy(() ->
performGet("/SPR-16318", headers, String.class).getBody())
.satisfies(ex -> {
assertThat(ex.getRawStatusCode()).isEqualTo(500);
assertThat(ex.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
assertThat(ex.getResponseHeaders().getContentType().toString()).isEqualTo("application/problem+json");
assertThat(ex.getResponseBodyAsString()).isEqualTo("{\"reason\":\"error\"}");
});

View File

@@ -27,7 +27,7 @@ import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.core.testfixture.io.buffer.LeakAwareDataBufferFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseCookie;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.util.MultiValueMap;
@@ -72,12 +72,12 @@ public class ZeroDemandResponse implements ServerHttpResponse {
@Override
public boolean setStatusCode(HttpStatus status) {
public boolean setStatusCode(HttpStatusCode status) {
throw new UnsupportedOperationException();
}
@Override
public HttpStatus getStatusCode() {
public HttpStatusCode getStatusCode() {
throw new UnsupportedOperationException();
}