From cfb29db27817fb90e0473cf23a4cceaf270d5335 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 28 Feb 2024 18:54:36 +0100 Subject: [PATCH] Initial support for Servlet 6.1 Closes gh-31159 --- .../mock/web/MockHttpServletResponse.java | 9 +++++++-- .../mock/web/MockHttpServletResponseTests.java | 2 +- .../testfixture/servlet/MockHttpServletResponse.java | 12 ++++++++++-- .../web/servlet/function/DefaultServerRequest.java | 5 +++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index ee7623dca7d..08a6200fba1 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -623,10 +623,15 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void sendRedirect(String url) throws IOException { + sendRedirect(url, HttpServletResponse.SC_MOVED_TEMPORARILY, true); + } + + // @Override - on Servlet 6.1 + public void sendRedirect(String url, int sc, boolean clearBuffer) throws IOException { Assert.state(!isCommitted(), "Cannot send redirect - response is already committed"); Assert.notNull(url, "Redirect URL must not be null"); setHeader(HttpHeaders.LOCATION, url); - setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); + setStatus(sc); setCommitted(true); } @@ -775,7 +780,7 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setStatus(int status) { - if (!this.isCommitted()) { + if (!isCommitted()) { this.status = status; } } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index 6d5c92007d1..a6f2964ddc2 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -201,7 +201,7 @@ class MockHttpServletResponseTests { response.setCharacterEncoding("UTF-8"); assertThat(response.getContentType()).isEqualTo("test/plain;charset=UTF-8"); assertThat(response.getHeader(CONTENT_TYPE)).isEqualTo("test/plain;charset=UTF-8"); - response.setCharacterEncoding(null); + response.setCharacterEncoding((String) null); assertThat(response.getContentType()).isEqualTo("test/plain"); assertThat(response.getHeader(CONTENT_TYPE)).isEqualTo("test/plain"); assertThat(response.getCharacterEncoding()).isEqualTo(WebUtils.DEFAULT_CHARACTER_ENCODING); diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java index 5617cb5b4b4..b48bd360229 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java @@ -623,10 +623,15 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void sendRedirect(String url) throws IOException { + sendRedirect(url, HttpServletResponse.SC_MOVED_TEMPORARILY, true); + } + + // @Override - on Servlet 6.1 + public void sendRedirect(String url, int sc, boolean clearBuffer) throws IOException { Assert.state(!isCommitted(), "Cannot send redirect - response is already committed"); Assert.notNull(url, "Redirect URL must not be null"); setHeader(HttpHeaders.LOCATION, url); - setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); + setStatus(sc); setCommitted(true); } @@ -775,7 +780,7 @@ public class MockHttpServletResponse implements HttpServletResponse { @Override public void setStatus(int status) { - if (!this.isCommitted()) { + if (!isCommitted()) { this.status = status; } } @@ -785,6 +790,9 @@ public class MockHttpServletResponse implements HttpServletResponse { return this.status; } + /** + * Return the error message used when calling {@link HttpServletResponse#sendError(int, String)}. + */ @Nullable public String getErrorMessage() { return this.errorMessage; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java index c70f5848843..d8824b6c1cc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java @@ -679,6 +679,11 @@ class DefaultServerRequest implements ServerRequest { throw new UnsupportedOperationException(); } + // @Override - on Servlet 6.1 + public void sendRedirect(String location, int sc, boolean clearBuffer) throws IOException { + throw new UnsupportedOperationException(); + } + @Override public void addDateHeader(String name, long date) { throw new UnsupportedOperationException();