Browse Source

Restore ResponseBodyEmitterReturnValueHandler constructor

Issue: SPR-15410
pull/1374/merge
Rossen Stoyanchev 9 years ago
parent
commit
de6f34893a
  1. 5
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java
  2. 25
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java
  3. 5
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java
  4. 6
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java

5
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java

@ -32,6 +32,7 @@ import org.reactivestreams.Subscription; @@ -32,6 +32,7 @@ import org.reactivestreams.Subscription;
import org.springframework.core.MethodParameter;
import org.springframework.core.ReactiveAdapter;
import org.springframework.core.ReactiveAdapterRegistry;
import org.springframework.core.task.SyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
@ -78,6 +79,10 @@ class ReactiveTypeHandler { @@ -78,6 +79,10 @@ class ReactiveTypeHandler {
private final ContentNegotiationManager contentNegotiationManager;
public ReactiveTypeHandler() {
this(new ReactiveAdapterRegistry(), new SyncTaskExecutor(), new ContentNegotiationManager());
}
ReactiveTypeHandler(ReactiveAdapterRegistry registry, TaskExecutor executor,
ContentNegotiationManager manager) {

25
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java

@ -50,6 +50,9 @@ import org.springframework.web.method.support.ModelAndViewContainer; @@ -50,6 +50,9 @@ import org.springframework.web.method.support.ModelAndViewContainer;
* such as {@link SseEmitter} including the same types wrapped with
* {@link ResponseEntity}.
*
* <p>As of 5.0 also supports reactive return value types for any reactive
* library with registered adapters in {@link ReactiveAdapterRegistry}.
*
* @author Rossen Stoyanchev
* @since 4.2
*/
@ -63,6 +66,28 @@ public class ResponseBodyEmitterReturnValueHandler implements HandlerMethodRetur @@ -63,6 +66,28 @@ public class ResponseBodyEmitterReturnValueHandler implements HandlerMethodRetur
private final ReactiveTypeHandler reactiveHandler;
/**
* Simple constructor with reactive type support based on a default instance of
* {@link ReactiveAdapterRegistry},
* {@link org.springframework.core.task.SyncTaskExecutor}, and
* {@link ContentNegotiationManager} with an Accept header strategy.
*/
public ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>> messageConverters) {
Assert.notEmpty(messageConverters, "HttpMessageConverter List must not be empty");
this.messageConverters = messageConverters;
this.reactiveHandler = new ReactiveTypeHandler();
}
/**
* Complete constructor with pluggable "reactive" type support.
*
* @param messageConverters converters to write emitted objects with
* @param reactiveRegistry for reactive return value type support
* @param executor for blocking I/O writes of items emitted from reactive types
* @param manager for detecting streaming media types
*
* @since 5.0
*/
public ResponseBodyEmitterReturnValueHandler(List<HttpMessageConverter<?>> messageConverters,
ReactiveAdapterRegistry reactiveRegistry, TaskExecutor executor,
ContentNegotiationManager manager) {

5
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java

@ -67,10 +67,7 @@ public class ResponseBodyEmitterReturnValueHandlerTests { @@ -67,10 +67,7 @@ public class ResponseBodyEmitterReturnValueHandlerTests {
List<HttpMessageConverter<?>> converters = Arrays.asList(
new StringHttpMessageConverter(), new MappingJackson2HttpMessageConverter());
ReactiveAdapterRegistry registry = new ReactiveAdapterRegistry();
TaskExecutor executor = new SyncTaskExecutor();
ContentNegotiationManager manager = new ContentNegotiationManager();
this.handler = new ResponseBodyEmitterReturnValueHandler(converters, registry, executor, manager);
this.handler = new ResponseBodyEmitterReturnValueHandler(converters);
this.request = new MockHttpServletRequest();
this.response = new MockHttpServletResponse();
this.webRequest = new ServletWebRequest(this.request, this.response);

6
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java

@ -28,9 +28,7 @@ import org.junit.Test; @@ -28,9 +28,7 @@ import org.junit.Test;
import reactor.core.publisher.Flux;
import org.springframework.core.MethodParameter;
import org.springframework.core.ReactiveAdapterRegistry;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.task.SyncTaskExecutor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
@ -256,9 +254,7 @@ public class ServletInvocableHandlerMethodTests { @@ -256,9 +254,7 @@ public class ServletInvocableHandlerMethodTests {
@Test
public void wrapConcurrentResult_ResponseBodyEmitter() throws Exception {
this.returnValueHandlers.addHandler(
new ResponseBodyEmitterReturnValueHandler(this.converters,
new ReactiveAdapterRegistry(), new SyncTaskExecutor(), new ContentNegotiationManager()));
this.returnValueHandlers.addHandler(new ResponseBodyEmitterReturnValueHandler(this.converters));
ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new StreamingHandler(), "handleEmitter");
handlerMethod = handlerMethod.wrapConcurrentResult(null);

Loading…
Cancel
Save