diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index 841b31840f..6e1e86907b 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -349,6 +349,11 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { return HttpStatus.valueOf(this.statusCode); } + @Override + public int rawStatusCode() { + return this.statusCode; + } + @Override public final HttpHeaders headers() { return this.headers; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java index eb07007a7c..2a3b886e40 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java @@ -60,9 +60,21 @@ public interface ServerResponse { /** * Return the status code of this response. + * @return the status as an HttpStatus enum value + * @throws IllegalArgumentException in case of an unknown HTTP status code + * @see HttpStatus#valueOf(int) */ HttpStatus statusCode(); + /** + * Return the (potentially non-standard) status code of this response. + * @return the status as an integer + * @since 5.2 + * @see #statusCode() + * @see HttpStatus#resolve(int) + */ + int rawStatusCode(); + /** * Return the headers of this response. */ diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilderTests.java index 2f0dcc8e0c..8b9304f64a 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultEntityResponseBuilderTests.java @@ -90,7 +90,8 @@ public class DefaultEntityResponseBuilderTests { String body = "foo"; Mono> result = EntityResponse.fromObject(body).status(HttpStatus.CREATED).build(); StepVerifier.create(result) - .expectNextMatches(response -> HttpStatus.CREATED.equals(response.statusCode())) + .expectNextMatches(response -> HttpStatus.CREATED.equals(response.statusCode()) && + response.rawStatusCode() == 201) .expectComplete() .verify(); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java index 979abb0302..e8957339a0 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java @@ -86,7 +86,8 @@ public class DefaultServerResponseBuilderTests { public void status() { Mono result = ServerResponse.status(HttpStatus.CREATED).build(); StepVerifier.create(result) - .expectNextMatches(response -> HttpStatus.CREATED.equals(response.statusCode())) + .expectNextMatches(response -> HttpStatus.CREATED.equals(response.statusCode()) && + response.rawStatusCode() == 201) .expectComplete() .verify(); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RouterFunctionsTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RouterFunctionsTests.java index 1491cfe49a..19f15cd6ea 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RouterFunctionsTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RouterFunctionsTests.java @@ -195,6 +195,10 @@ public class RouterFunctionsTests { return HttpStatus.OK; } @Override + public int rawStatusCode() { + return 200; + } + @Override public HttpHeaders headers() { return new HttpHeaders(); } @@ -229,6 +233,10 @@ public class RouterFunctionsTests { return HttpStatus.OK; } @Override + public int rawStatusCode() { + return 200; + } + @Override public HttpHeaders headers() { return new HttpHeaders(); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java index 590a130296..137618e117 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java @@ -264,6 +264,11 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { return HttpStatus.valueOf(this.statusCode); } + @Override + public int rawStatusCode() { + return this.statusCode; + } + @Override public final HttpHeaders headers() { return this.headers; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java index ec64b387c1..e2d15a75ba 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/ServerResponse.java @@ -57,9 +57,20 @@ public interface ServerResponse { /** * Return the status code of this response. + * @return the status as an HttpStatus enum value + * @throws IllegalArgumentException in case of an unknown HTTP status code + * @see HttpStatus#valueOf(int) */ HttpStatus statusCode(); + /** + * Return the (potentially non-standard) status code of this response. + * @return the status as an integer + * @see #statusCode() + * @see HttpStatus#valueOf(int) + */ + int rawStatusCode(); + /** * Return the headers of this response. */ diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java index aa677fb1b3..0f8a4bbad0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java @@ -81,6 +81,7 @@ public class DefaultEntityResponseBuilderTests { EntityResponse.fromObject(body).status(HttpStatus.CREATED).build(); assertThat(result.statusCode()).isEqualTo(HttpStatus.CREATED); + assertThat(result.rawStatusCode()).isEqualTo(201); } @Test diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java index dd2614a149..3857644679 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerResponseBuilderTests.java @@ -67,6 +67,7 @@ public class DefaultServerResponseBuilderTests { public void status() { ServerResponse response = ServerResponse.status(HttpStatus.CREATED).build(); assertThat(response.statusCode()).isEqualTo(HttpStatus.CREATED); + assertThat(response.rawStatusCode()).isEqualTo(201); } @Test