@@ -103,7 +103,8 @@ static <T> BodyExtractor<Mono<T>, ReactiveHttpInputMessage> toMono(ResolvableTyp
103
103
return reader .readMono (elementType , inputMessage , context .hints ());
104
104
}
105
105
},
106
- Mono ::error ,
106
+ ex -> (inputMessage .getHeaders ().getContentType () == null ) ?
107
+ Mono .from (permitEmptyOrFail (inputMessage , ex )) : Mono .error (ex ),
107
108
Mono ::empty );
108
109
}
109
110
@@ -138,6 +139,7 @@ public static <T> BodyExtractor<Flux<T>, ReactiveHttpInputMessage> toFlux(Parame
138
139
return toFlux (ResolvableType .forType (typeReference .getType ()));
139
140
}
140
141
142
+ @ SuppressWarnings ("unchecked" )
141
143
static <T > BodyExtractor <Flux <T >, ReactiveHttpInputMessage > toFlux (ResolvableType elementType ) {
142
144
Assert .notNull (elementType , "'elementType' must not be null" );
143
145
return (inputMessage , context ) -> readWithMessageReaders (inputMessage , context ,
@@ -152,10 +154,18 @@ static <T> BodyExtractor<Flux<T>, ReactiveHttpInputMessage> toFlux(ResolvableTyp
152
154
return reader .read (elementType , inputMessage , context .hints ());
153
155
}
154
156
},
155
- Flux ::error ,
157
+ ex -> (inputMessage .getHeaders ().getContentType () == null ) ?
158
+ permitEmptyOrFail (inputMessage , ex ) : Flux .error (ex ),
156
159
Flux ::empty );
157
160
}
158
161
162
+ @ SuppressWarnings ("unchecked" )
163
+ private static <T > Flux <T > permitEmptyOrFail (ReactiveHttpInputMessage message , UnsupportedMediaTypeException ex ) {
164
+ return message .getBody ().doOnNext (buffer -> {
165
+ throw ex ;
166
+ }).map (o -> (T ) o );
167
+ }
168
+
159
169
/**
160
170
* Return a {@code BodyExtractor} that reads form data into a {@link MultiValueMap}.
161
171
* @return a {@code BodyExtractor} that reads form data
@@ -225,7 +235,8 @@ public static BodyExtractor<Flux<DataBuffer>, ReactiveHttpInputMessage> toDataBu
225
235
226
236
private static <T , S extends Publisher <T >> S readWithMessageReaders (
227
237
ReactiveHttpInputMessage inputMessage , BodyExtractor .Context context , ResolvableType elementType ,
228
- Function <HttpMessageReader <T >, S > readerFunction , Function <Throwable , S > unsupportedError ,
238
+ Function <HttpMessageReader <T >, S > readerFunction ,
239
+ Function <UnsupportedMediaTypeException , S > unsupportedError ,
229
240
Supplier <S > empty ) {
230
241
231
242
if (VOID_TYPE .equals (elementType )) {
0 commit comments