diff --git a/spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java b/spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java index 70e89d1bce..34a4ad927f 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java @@ -107,6 +107,22 @@ public class DeferredResult { return ((this.result != RESULT_NONE) || this.expired); } + /** + * @return {@code true} if the DeferredResult has been set. + */ + public boolean hasResult() { + return this.result != RESULT_NONE; + } + + /** + * @return the result or {@code null} if the result wasn't set; since the result can + * also be {@code null}, it is recommended to use {@link #hasResult()} first + * to check if there is a result prior to calling this method. + */ + public Object getResult() { + return hasResult() ? this.result : null; + } + /** * Return the configured timeout value in milliseconds. */ diff --git a/spring-web/src/test/java/org/springframework/web/context/request/async/DeferredResultTests.java b/spring-web/src/test/java/org/springframework/web/context/request/async/DeferredResultTests.java index dbdf0a5a2b..6c0854b77f 100644 --- a/spring-web/src/test/java/org/springframework/web/context/request/async/DeferredResultTests.java +++ b/spring-web/src/test/java/org/springframework/web/context/request/async/DeferredResultTests.java @@ -20,7 +20,7 @@ import org.junit.Test; import org.springframework.web.context.request.async.DeferredResult.DeferredResultHandler; import static org.junit.Assert.*; -import static org.mockito.BDDMockito.*; +import static org.mockito.Mockito.*; /** * DeferredResult tests. @@ -69,6 +69,21 @@ public class DeferredResultTests { verify(handler).handleResult("hello"); } + @Test + public void hasResult() { + DeferredResultHandler handler = mock(DeferredResultHandler.class); + + DeferredResult result = new DeferredResult(); + result.setResultHandler(handler); + + assertFalse(result.hasResult()); + assertNull(result.getResult()); + + result.setResult("hello"); + + assertEquals("hello", result.getResult()); + } + @Test public void onCompletion() throws Exception { final StringBuilder sb = new StringBuilder();