From 0a2c3c3744e7696d51b2c5f33c21e1ebc35663a6 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 10 Jun 2016 14:53:19 -0400 Subject: [PATCH] Polish RequestBodyArgumentResolver --- .../annotation/RequestBodyArgumentResolver.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java index 1d56999bab..69d6d892c7 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java @@ -96,8 +96,9 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve ServerWebExchange exchange) { ResolvableType type = ResolvableType.forMethodParameter(parameter); - boolean asyncType = isAsyncType(type); - ResolvableType elementType = (asyncType ? type.getGeneric(0) : type); + boolean isAsyncType = isAsyncType(type); + ResolvableType elementType = (isAsyncType ? type.getGeneric(0) : type); + MediaType mediaType = exchange.getRequest().getHeaders().getContentType(); if (mediaType == null) { mediaType = MediaType.APPLICATION_OCTET_STREAM; @@ -107,18 +108,15 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve if (converter.canRead(elementType, mediaType)) { Flux elementFlux = converter.read(elementType, exchange.getRequest()); if (Mono.class.equals(type.getRawClass())) { - Object value = Mono.from(elementFlux); - return Mono.just(value); + return Mono.just(Mono.from(elementFlux)); } else if (Flux.class.equals(type.getRawClass())) { return Mono.just(elementFlux); } - else if (asyncType) { - Object value = getConversionService().convert(elementFlux, type.getRawClass()); - return Mono.just(value); + else if (isAsyncType) { + return Mono.just(getConversionService().convert(elementFlux, type.getRawClass())); } else { - // TODO Currently manage only "Foo" parameter, not "List" parameters, Stéphane is going to add toIterable/toIterator to Flux to support that use case return elementFlux.next().map(o -> o); } }