From f20f6c952aa9385d622fb1cd9ec6a4cc9023364c Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Tue, 31 May 2016 09:33:54 -0400 Subject: [PATCH] Flush headers after null ResponseBodyEmitter Issue: SPR-14315 --- .../annotation/ResponseBodyEmitterReturnValueHandler.java | 1 + .../ResponseBodyEmitterReturnValueHandlerTests.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java index 7930819c8a..264ca73ce8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java @@ -137,6 +137,7 @@ public class ResponseBodyEmitterReturnValueHandler implements AsyncHandlerMethod returnValue = responseEntity.getBody(); if (returnValue == null) { mavContainer.setRequestHandled(true); + outputMessage.flush(); return; } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java index 0ac243a5a4..bec3bfb1ba 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java @@ -21,6 +21,7 @@ import static org.springframework.web.servlet.mvc.method.annotation.SseEmitter.* import java.lang.reflect.Method; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -184,11 +185,12 @@ public class ResponseBodyEmitterReturnValueHandlerTests { @Test public void responseEntitySseNoContent() throws Exception { MethodParameter returnType = returnType("handleResponseEntitySse"); - ResponseEntity entity = ResponseEntity.noContent().build(); + ResponseEntity entity = ResponseEntity.noContent().header("foo", "bar").build(); handleReturnValue(entity, returnType); assertFalse(this.request.isAsyncStarted()); assertEquals(204, this.response.getStatus()); + assertEquals(Collections.singletonList("bar"), this.response.getHeaders("foo")); } private void handleReturnValue(Object returnValue, MethodParameter returnType) throws Exception {