@ -194,18 +194,16 @@ public abstract class BodyExtractors {
MediaType contentType = Optional . ofNullable ( message . getHeaders ( ) . getContentType ( ) )
MediaType contentType = Optional . ofNullable ( message . getHeaders ( ) . getContentType ( ) )
. orElse ( MediaType . APPLICATION_OCTET_STREAM ) ;
. orElse ( MediaType . APPLICATION_OCTET_STREAM ) ;
return context . messageReaders ( ) . stream ( )
for ( HttpMessageReader < ? > messageReader : context . messageReaders ( ) ) {
. filter ( reader - > reader . canRead ( elementType , contentType ) )
if ( messageReader . canRead ( elementType , contentType ) ) {
. findFirst ( )
return readerFunction . apply ( cast ( messageReader ) ) ;
. map ( BodyExtractors : : < T > cast )
}
. map ( readerFunction )
}
. orElseGet ( ( ) - > {
List < MediaType > mediaTypes = context . messageReaders ( ) . stream ( )
List < MediaType > mediaTypes = context . messageReaders ( ) . stream ( )
. flatMap ( reader - > reader . getReadableMediaTypes ( elementType ) . stream ( ) )
. flatMap ( reader - > reader . getReadableMediaTypes ( elementType ) . stream ( ) )
. toList ( ) ;
. toList ( ) ;
return errorFunction . apply (
return errorFunction . apply (
new UnsupportedMediaTypeException ( contentType , mediaTypes , elementType ) ) ;
new UnsupportedMediaTypeException ( contentType , mediaTypes , elementType ) ) ;
} ) ;
}
}
private static < T > Mono < T > readToMono ( ReactiveHttpInputMessage message , BodyExtractor . Context context ,
private static < T > Mono < T > readToMono ( ReactiveHttpInputMessage message , BodyExtractor . Context context ,
@ -245,12 +243,13 @@ public abstract class BodyExtractors {
private static < T > HttpMessageReader < T > findReader (
private static < T > HttpMessageReader < T > findReader (
ResolvableType elementType , MediaType mediaType , BodyExtractor . Context context ) {
ResolvableType elementType , MediaType mediaType , BodyExtractor . Context context ) {
return context . messageReaders ( ) . stream ( )
for ( HttpMessageReader < ? > messageReader : context . messageReaders ( ) ) {
. filter ( messageReader - > messageReader . canRead ( elementType , mediaType ) )
if ( messageReader . canRead ( elementType , mediaType ) ) {
. findFirst ( )
return cast ( messageReader ) ;
. map ( BodyExtractors : : < T > cast )
}
. orElseThrow ( ( ) - > new IllegalStateException (
}
"No HttpMessageReader for \"" + mediaType + "\" and \"" + elementType + "\"" ) ) ;
throw new IllegalStateException (
"No HttpMessageReader for \"" + mediaType + "\" and \"" + elementType + "\"" ) ;
}
}
@SuppressWarnings ( "unchecked" )
@SuppressWarnings ( "unchecked" )