@ -42,6 +42,9 @@ public class WebResponseExtractors {
private static final Object [ ] HINTS = new Object [ ] { UTF_8 } ;
private static final Object [ ] HINTS = new Object [ ] { UTF_8 } ;
private static final Object EMPTY_BODY = new Object ( ) ;
/ * *
/ * *
* Extract the response body and decode it , returning it as a { @code Mono < T > }
* Extract the response body and decode it , returning it as a { @code Mono < T > }
* /
* /
@ -68,18 +71,21 @@ public class WebResponseExtractors {
* Extract the full response body as a { @code ResponseEntity }
* Extract the full response body as a { @code ResponseEntity }
* with its body decoded as a single type { @code T }
* with its body decoded as a single type { @code T }
* /
* /
public static < T > WebResponseExtractor < Mono < ResponseEntity < T > > > response ( Class < T > source Class) {
public static < T > WebResponseExtractor < Mono < ResponseEntity < T > > > response ( Class < T > body Class) {
ResolvableType resolvable Type = ResolvableType . forClass ( source Class) ;
ResolvableType body Type = ResolvableType . forClass ( body Class) ;
return webResponse - > webResponse . getClientResponse ( )
return webResponse - > webResponse . getClientResponse ( )
. then ( response - >
. then ( response - > {
Mono . when (
List < Decoder < ? > > decoders = webResponse . getMessageDecoders ( ) ;
decodeResponseBody ( response , resolvableType , webResponse . getMessageDecoders ( ) ) . next ( ) ,
return Mono . when (
Mono . just ( response . getHeaders ( ) ) ,
decodeResponseBody ( response , bodyType , decoders ) . next ( ) . defaultIfEmpty ( EMPTY_BODY ) ,
Mono . just ( response . getStatusCode ( ) ) ) )
Mono . just ( response . getHeaders ( ) ) ,
Mono . just ( response . getStatusCode ( ) ) ) ;
} )
. map ( tuple - > {
. map ( tuple - > {
Object body = ( tuple . getT1 ( ) ! = EMPTY_BODY ? tuple . getT1 ( ) : null ) ;
//noinspection unchecked
//noinspection unchecked
return new ResponseEntity < > ( ( T ) tuple . getT1 ( ) , tuple . getT2 ( ) , tuple . getT3 ( ) ) ;
return new ResponseEntity < > ( ( T ) body , tuple . getT2 ( ) , tuple . getT3 ( ) ) ;
} ) ;
} ) ;
}
}