@@ -84,8 +84,8 @@ private static <T> BodyExtractor<Mono<T>, ReactiveHttpInputMessage> toMono(Resol
84
84
return (inputMessage , context ) ->
85
85
readWithMessageReaders (inputMessage , context , elementType ,
86
86
(HttpMessageReader <T > reader ) -> readToMono (inputMessage , context , elementType , reader ),
87
- ex -> Mono .from (unsupportedErrorHandler (inputMessage , context , ex )),
88
- skipBodyAsMono (inputMessage , context ));
87
+ ex -> Mono .from (unsupportedErrorHandler (inputMessage , ex )),
88
+ skipBodyAsMono (inputMessage ));
89
89
}
90
90
91
91
/**
@@ -113,8 +113,8 @@ private static <T> BodyExtractor<Flux<T>, ReactiveHttpInputMessage> toFlux(Resol
113
113
return (inputMessage , context ) ->
114
114
readWithMessageReaders (inputMessage , context , elementType ,
115
115
(HttpMessageReader <T > reader ) -> readToFlux (inputMessage , context , elementType , reader ),
116
- ex -> unsupportedErrorHandler (inputMessage , context , ex ),
117
- skipBodyAsFlux (inputMessage , context ));
116
+ ex -> unsupportedErrorHandler (inputMessage , ex ),
117
+ skipBodyAsFlux (inputMessage ));
118
118
}
119
119
120
120
@@ -194,39 +194,13 @@ private static <T, S extends Publisher<T>> S readWithMessageReaders(
194
194
.findFirst ()
195
195
.map (BodyExtractors ::<T >cast )
196
196
.map (readerFunction )
197
- .orElseGet (() -> errorFunction .apply (unsupportedError (context , elementType , contentType )));
198
- }
199
-
200
- private static <T > Supplier <Flux <T >> skipBodyAsFlux (ReactiveHttpInputMessage message ,
201
- BodyExtractor .Context context ) {
202
-
203
- if (isExtractingForClient (message )) {
204
- return () -> consumeAndCancel (message ).thenMany (Flux .empty ());
205
- }
206
- else {
207
- return Flux ::empty ;
208
- }
209
- }
210
-
211
- private static <T > Supplier <Mono <T >> skipBodyAsMono (ReactiveHttpInputMessage message ,
212
- BodyExtractor .Context context ) {
213
-
214
- if (isExtractingForClient (message )) {
215
- return () -> consumeAndCancel (message ).then (Mono .empty ());
216
- }
217
- else {
218
- return Mono ::empty ;
219
- }
220
- }
221
-
222
- private static UnsupportedMediaTypeException unsupportedError (BodyExtractor .Context context ,
223
- ResolvableType elementType , MediaType contentType ) {
224
-
225
- List <MediaType > supportedMediaTypes = context .messageReaders ().stream ()
226
- .flatMap (reader -> reader .getReadableMediaTypes ().stream ())
227
- .collect (Collectors .toList ());
228
-
229
- return new UnsupportedMediaTypeException (contentType , supportedMediaTypes , elementType );
197
+ .orElseGet (() -> {
198
+ List <MediaType > mediaTypes = context .messageReaders ().stream ()
199
+ .flatMap (reader -> reader .getReadableMediaTypes ().stream ())
200
+ .collect (Collectors .toList ());
201
+ return errorFunction .apply (
202
+ new UnsupportedMediaTypeException (contentType , mediaTypes , elementType ));
203
+ });
230
204
}
231
205
232
206
private static <T > Mono <T > readToMono (ReactiveHttpInputMessage message , BodyExtractor .Context context ,
@@ -246,21 +220,22 @@ private static <T> Flux<T> readToFlux(ReactiveHttpInputMessage message, BodyExtr
246
220
}
247
221
248
222
private static <T > Flux <T > unsupportedErrorHandler (
249
- ReactiveHttpInputMessage inputMessage , BodyExtractor .Context context ,
250
- UnsupportedMediaTypeException ex ) {
223
+ ReactiveHttpInputMessage message , UnsupportedMediaTypeException ex ) {
251
224
252
225
Flux <T > result ;
253
- if (inputMessage .getHeaders ().getContentType () == null ) {
254
- // Empty body with no content type is ok
255
- result = inputMessage .getBody ().map (o -> {
226
+ if (message .getHeaders ().getContentType () == null ) {
227
+ // Maybe it's okay, if there is no content..
228
+ result = message .getBody ().map (o -> {
256
229
throw ex ;
257
230
});
258
231
}
259
232
else {
260
233
result = Flux .error (ex );
261
234
}
262
- return isExtractingForClient (inputMessage ) ?
263
- consumeAndCancel (inputMessage ).thenMany (result ) : result ;
235
+ if (message instanceof ClientHttpResponse ) {
236
+ result = consumeAndCancel (message ).thenMany (result );
237
+ }
238
+ return result ;
264
239
}
265
240
266
241
private static <T > HttpMessageReader <T > findReader (
@@ -279,8 +254,15 @@ private static <T> HttpMessageReader<T> cast(HttpMessageReader<?> reader) {
279
254
return (HttpMessageReader <T >) reader ;
280
255
}
281
256
282
- private static boolean isExtractingForClient (ReactiveHttpInputMessage message ) {
283
- return message instanceof ClientHttpResponse ;
257
+ private static <T > Supplier <Flux <T >> skipBodyAsFlux (ReactiveHttpInputMessage message ) {
258
+ return message instanceof ClientHttpResponse ?
259
+ () -> consumeAndCancel (message ).thenMany (Mono .empty ()) : Flux ::empty ;
260
+ }
261
+
262
+ @ SuppressWarnings ("unchecked" )
263
+ private static <T > Supplier <Mono <T >> skipBodyAsMono (ReactiveHttpInputMessage message ) {
264
+ return message instanceof ClientHttpResponse ?
265
+ () -> consumeAndCancel (message ).then (Mono .empty ()) : Mono ::empty ;
284
266
}
285
267
286
268
private static Mono <Void > consumeAndCancel (ReactiveHttpInputMessage message ) {
@@ -296,4 +278,5 @@ private static Mono<Void> consumeAndCancel(ReactiveHttpInputMessage message) {
296
278
@ SuppressWarnings ("serial" )
297
279
private static class ReadCancellationException extends RuntimeException {
298
280
}
281
+
299
282
}
0 commit comments