Polishing in HTTP interface argument resolvers
This commit is contained in:
parent
51de84e148
commit
cef1b7ea6d
|
@ -978,11 +978,13 @@ method parameters:
|
||||||
`MultiValueMap<String, ?>` with multiple cookies, a `Collection<?>` of values, or an
|
`MultiValueMap<String, ?>` with multiple cookies, a `Collection<?>` of values, or an
|
||||||
individual value. Type conversion is supported for non-String values.
|
individual value. Type conversion is supported for non-String values.
|
||||||
|
|
||||||
The parameters can't be null unless they are set as not required through the annotation,
|
|
||||||
annotated with `@Nullable` or they are `Optional`.
|
|
||||||
|
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
Method parameters cannot be `null` unless the `required` attribute (where available on a
|
||||||
|
parameter annotation) is set to `false`, or the parameter is marked optional as determined by
|
||||||
|
{spring-framework-api}/core/MethodParameter.html#isOptional()[`MethodParameter#isOptional`].
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[rest-http-interface-return-values]]
|
[[rest-http-interface-return-values]]
|
||||||
=== Return Values
|
=== Return Values
|
||||||
|
|
|
@ -1115,8 +1115,9 @@ method parameters:
|
||||||
| `@Payload`
|
| `@Payload`
|
||||||
| Set the input payload(s) for the request. This can be a concrete value, or any producer
|
| Set the input payload(s) for the request. This can be a concrete value, or any producer
|
||||||
of values that can be adapted to a Reactive Streams `Publisher` via
|
of values that can be adapted to a Reactive Streams `Publisher` via
|
||||||
`ReactiveAdapterRegistry`. The payload can't be null unless it's set as not required
|
`ReactiveAdapterRegistry`. A payload must be provided unless the `required` attribute
|
||||||
through the annotation, annotated with `@Nullable` or it is `Optional`.
|
is set to `false`, or the parameter is marked optional as determined by
|
||||||
|
{spring-framework-api}/core/MethodParameter.html#isOptional()[`MethodParameter#isOptional`].
|
||||||
|
|
||||||
| `Object`, if followed by `MimeType`
|
| `Object`, if followed by `MimeType`
|
||||||
| The value for a metadata entry in the input payload. This can be any `Object` as long
|
| The value for a metadata entry in the input payload. This can be any `Object` as long
|
||||||
|
|
|
@ -56,14 +56,13 @@ public class PayloadArgumentResolver implements RSocketServiceArgumentResolver {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argument == null) {
|
if (argument == null) {
|
||||||
boolean required = (annot == null || annot.required()) && !parameter.isOptional();
|
boolean isOptional = ((annot != null && !annot.required()) || parameter.isOptional());
|
||||||
Assert.isTrue(!required, () -> "Missing payload");
|
Assert.isTrue(isOptional, () -> "Missing payload");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReactiveAdapter reactiveAdapter = this.reactiveAdapterRegistry
|
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(parameter.getParameterType());
|
||||||
.getAdapter(parameter.getParameterType());
|
if (adapter == null) {
|
||||||
if (reactiveAdapter == null) {
|
|
||||||
requestValues.setPayloadValue(argument);
|
requestValues.setPayloadValue(argument);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -71,12 +70,13 @@ public class PayloadArgumentResolver implements RSocketServiceArgumentResolver {
|
||||||
|
|
||||||
String message = "Async type for @Payload should produce value(s)";
|
String message = "Async type for @Payload should produce value(s)";
|
||||||
Assert.isTrue(nestedParameter.getNestedParameterType() != Void.class, message);
|
Assert.isTrue(nestedParameter.getNestedParameterType() != Void.class, message);
|
||||||
Assert.isTrue(!reactiveAdapter.isNoValue(), message);
|
Assert.isTrue(!adapter.isNoValue(), message);
|
||||||
|
|
||||||
requestValues.setPayload(
|
requestValues.setPayload(
|
||||||
reactiveAdapter.toPublisher(argument),
|
adapter.toPublisher(argument),
|
||||||
ParameterizedTypeReference.forType(nestedParameter.getNestedGenericParameterType()));
|
ParameterizedTypeReference.forType(nestedParameter.getNestedGenericParameterType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ public class HttpMethodArgumentResolver implements HttpServiceArgumentResolver {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace("Resolved HTTP method to: " + httpMethod.name());
|
logger.trace("Resolved HTTP method to: " + httpMethod.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,7 @@ public class RequestBodyArgumentResolver implements HttpServiceArgumentResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.reactiveAdapterRegistry != null) {
|
if (this.reactiveAdapterRegistry != null) {
|
||||||
ReactiveAdapter adapter = this.reactiveAdapterRegistry
|
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(parameter.getParameterType());
|
||||||
.getAdapter(parameter.getParameterType());
|
|
||||||
if (adapter != null) {
|
if (adapter != null) {
|
||||||
MethodParameter nestedParameter = parameter.nested();
|
MethodParameter nestedParameter = parameter.nested();
|
||||||
|
|
||||||
|
@ -102,6 +101,7 @@ public class RequestBodyArgumentResolver implements HttpServiceArgumentResolver
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not a reactive type
|
// Not a reactive type
|
||||||
requestValues.setBodyValue(argument);
|
requestValues.setBodyValue(argument);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue