Double check that a Function can return a Mono

This commit is contained in:
Dave Syer
2018-05-15 08:43:28 +01:00
parent af5f5b78de
commit e34324b5b4
5 changed files with 116 additions and 30 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.cloud.function.web.flux;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -124,12 +125,24 @@ public class FunctionController {
return Mono.from(result);
}
if (isInputMultiple(handler) && isOutputSingle(handler)) {
request.setAttribute(WebRequestConstants.OUTPUT_SINGLE, true,
WebRequest.SCOPE_REQUEST);
return Mono.from(result);
}
request.setAttribute(WebRequestConstants.OUTPUT_SINGLE, false,
WebRequest.SCOPE_REQUEST);
return result;
}
private boolean isInputMultiple(Object handler) {
Class<?> type = inspector.getInputType(handler);
Class<?> wrapper = inspector.getInputWrapper(handler);
return Collection.class.isAssignableFrom(type) || Flux.class.equals(wrapper);
}
private boolean isOutputSingle(Object handler) {
Class<?> type = inspector.getOutputType(handler);
Class<?> wrapper = inspector.getOutputWrapper(handler);