Add support for RSocket interface client

See gh-24456
This commit is contained in:
rstoyanchev
2022-09-05 16:54:30 +01:00
parent ae861a2b3e
commit 8423b2cab7
22 changed files with 1956 additions and 93 deletions

View File

@@ -55,31 +55,23 @@ public class RequestBodyArgumentResolver implements HttpServiceArgumentResolver
if (argument != null) {
ReactiveAdapter reactiveAdapter = this.reactiveAdapterRegistry.getAdapter(parameter.getParameterType());
if (reactiveAdapter != null) {
setBody(argument, parameter, reactiveAdapter, requestValues);
if (reactiveAdapter == null) {
requestValues.setBodyValue(argument);
}
else {
requestValues.setBodyValue(argument);
MethodParameter nestedParameter = parameter.nested();
String message = "Async type for @RequestBody should produce value(s)";
Assert.isTrue(!reactiveAdapter.isNoValue(), message);
Assert.isTrue(nestedParameter.getNestedParameterType() != Void.class, message);
requestValues.setBody(
reactiveAdapter.toPublisher(argument),
ParameterizedTypeReference.forType(nestedParameter.getNestedGenericParameterType()));
}
}
return true;
}
private <E> void setBody(
Object argument, MethodParameter parameter, ReactiveAdapter reactiveAdapter,
HttpRequestValues.Builder requestValues) {
String message = "Async type for @RequestBody should produce value(s)";
Assert.isTrue(!reactiveAdapter.isNoValue(), message);
parameter = parameter.nested();
Class<?> elementClass = parameter.getNestedParameterType();
Assert.isTrue(elementClass != Void.class, message);
ParameterizedTypeReference<E> typeRef = ParameterizedTypeReference.forType(parameter.getNestedGenericParameterType());
Publisher<E> publisher = reactiveAdapter.toPublisher(argument);
requestValues.setBody(publisher, typeRef);
}
}