Polish (minor) in AbstractMessageReaderArgumentResolver
This commit is contained in:
@@ -127,8 +127,8 @@ public abstract class AbstractMessageReaderArgumentResolver extends HandlerMetho
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Read the body from a method argument with {@link HttpMessageReader}.
|
* Read the body from a method argument with {@link HttpMessageReader}.
|
||||||
* @param bodyParameter the {@link MethodParameter} to read
|
* @param bodyParam the {@link MethodParameter} to read
|
||||||
* @param actualParameter the actual {@link MethodParameter} to read; could be different
|
* @param actualParam the actual {@link MethodParameter} to read; could be different
|
||||||
* from {@code bodyParameter} when processing {@code HttpEntity} for example
|
* from {@code bodyParameter} when processing {@code HttpEntity} for example
|
||||||
* @param isBodyRequired true if the body is required
|
* @param isBodyRequired true if the body is required
|
||||||
* @param bindingContext the binding context to use
|
* @param bindingContext the binding context to use
|
||||||
@@ -136,12 +136,11 @@ public abstract class AbstractMessageReaderArgumentResolver extends HandlerMetho
|
|||||||
* @return the body
|
* @return the body
|
||||||
* @since 5.0.2
|
* @since 5.0.2
|
||||||
*/
|
*/
|
||||||
protected Mono<Object> readBody(MethodParameter bodyParameter, @Nullable MethodParameter actualParameter,
|
protected Mono<Object> readBody(MethodParameter bodyParam, @Nullable MethodParameter actualParam,
|
||||||
boolean isBodyRequired, BindingContext bindingContext, ServerWebExchange exchange) {
|
boolean isBodyRequired, BindingContext bindingContext, ServerWebExchange exchange) {
|
||||||
|
|
||||||
ResolvableType bodyType = ResolvableType.forMethodParameter(bodyParameter);
|
ResolvableType bodyType = ResolvableType.forMethodParameter(bodyParam);
|
||||||
ResolvableType actualType = (actualParameter == null ?
|
ResolvableType actualType = actualParam == null ? bodyType : ResolvableType.forMethodParameter(actualParam);
|
||||||
bodyType : ResolvableType.forMethodParameter(actualParameter));
|
|
||||||
Class<?> resolvedType = bodyType.resolve();
|
Class<?> resolvedType = bodyType.resolve();
|
||||||
ReactiveAdapter adapter = (resolvedType != null ? getAdapterRegistry().getAdapter(resolvedType) : null);
|
ReactiveAdapter adapter = (resolvedType != null ? getAdapterRegistry().getAdapter(resolvedType) : null);
|
||||||
ResolvableType elementType = (adapter != null ? bodyType.getGeneric() : bodyType);
|
ResolvableType elementType = (adapter != null ? bodyType.getGeneric() : bodyType);
|
||||||
@@ -153,42 +152,37 @@ public abstract class AbstractMessageReaderArgumentResolver extends HandlerMetho
|
|||||||
MediaType mediaType = (contentType != null ? contentType : MediaType.APPLICATION_OCTET_STREAM);
|
MediaType mediaType = (contentType != null ? contentType : MediaType.APPLICATION_OCTET_STREAM);
|
||||||
|
|
||||||
Supplier<Throwable> missingBodyError = isBodyRequired || (adapter != null && !adapter.supportsEmpty()) ?
|
Supplier<Throwable> missingBodyError = isBodyRequired || (adapter != null && !adapter.supportsEmpty()) ?
|
||||||
() -> handleMissingBody(bodyParameter) : null;
|
() -> handleMissingBody(bodyParam) : null;
|
||||||
|
|
||||||
for (HttpMessageReader<?> reader : getMessageReaders()) {
|
for (HttpMessageReader<?> reader : getMessageReaders()) {
|
||||||
if (reader.canRead(elementType, mediaType)) {
|
if (reader.canRead(elementType, mediaType)) {
|
||||||
Map<String, Object> readHints = Collections.emptyMap();
|
Map<String, Object> readHints = Collections.emptyMap();
|
||||||
if (adapter != null && adapter.isMultiValue()) {
|
if (adapter != null && adapter.isMultiValue()) {
|
||||||
Flux<?> flux = reader.read(actualType, elementType, request, response, readHints);
|
Flux<?> flux = reader.read(actualType, elementType, request, response, readHints);
|
||||||
flux = flux.onErrorResume(ex -> Flux.error(handleReadError(bodyParameter, ex)));
|
flux = flux.onErrorResume(ex -> Flux.error(handleReadError(bodyParam, ex)));
|
||||||
if (missingBodyError != null) {
|
if (missingBodyError != null) {
|
||||||
flux = flux.switchIfEmpty(Flux.error(missingBodyError));
|
flux = flux.switchIfEmpty(Flux.error(missingBodyError));
|
||||||
}
|
}
|
||||||
Object[] hints = extractValidationHints(bodyParameter);
|
Object[] hints = extractValidationHints(bodyParam);
|
||||||
if (hints != null) {
|
if (hints != null) {
|
||||||
flux = flux.doOnNext(target ->
|
flux = flux.doOnNext(target ->
|
||||||
validate(target, hints, bodyParameter, bindingContext, exchange));
|
validate(target, hints, bodyParam, bindingContext, exchange));
|
||||||
}
|
}
|
||||||
return Mono.just(adapter.fromPublisher(flux));
|
return Mono.just(adapter.fromPublisher(flux));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Single-value (with or without reactive type wrapper)
|
// Single-value (with or without reactive type wrapper)
|
||||||
Mono<?> mono = reader.readMono(actualType, elementType, request, response, readHints);
|
Mono<?> mono = reader.readMono(actualType, elementType, request, response, readHints);
|
||||||
mono = mono.onErrorResume(ex -> Mono.error(handleReadError(bodyParameter, ex)));
|
mono = mono.onErrorResume(ex -> Mono.error(handleReadError(bodyParam, ex)));
|
||||||
if (missingBodyError != null) {
|
if (missingBodyError != null) {
|
||||||
mono = mono.switchIfEmpty(Mono.error(missingBodyError));
|
mono = mono.switchIfEmpty(Mono.error(missingBodyError));
|
||||||
}
|
}
|
||||||
Object[] hints = extractValidationHints(bodyParameter);
|
Object[] hints = extractValidationHints(bodyParam);
|
||||||
if (hints != null) {
|
if (hints != null) {
|
||||||
mono = mono.doOnNext(target ->
|
mono = mono.doOnNext(target ->
|
||||||
validate(target, hints, bodyParameter, bindingContext, exchange));
|
validate(target, hints, bodyParam, bindingContext, exchange));
|
||||||
}
|
|
||||||
if (adapter != null) {
|
|
||||||
return Mono.just(adapter.fromPublisher(mono));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return Mono.from(mono);
|
|
||||||
}
|
}
|
||||||
|
return adapter != null ? Mono.just(adapter.fromPublisher(mono)) : Mono.from(mono);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user