@ -51,38 +51,38 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
private final List < HandlerFilterFunction < ServerResponse , ServerResponse > > errorHandlers = new ArrayList < > ( ) ;
private final List < HandlerFilterFunction < ServerResponse , ServerResponse > > errorHandlers = new ArrayList < > ( ) ;
@SuppressWarnings ( "unchecked" )
@Override
@Override
public RouterFunctions . Builder add ( RouterFunction < ServerResponse > routerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder add ( RouterFunction < T > routerFunction ) {
Assert . notNull ( routerFunction , "RouterFunction must not be null" ) ;
Assert . notNull ( routerFunction , "RouterFunction must not be null" ) ;
this . routerFunctions . add ( routerFunction ) ;
this . routerFunctions . add ( ( RouterFunction < ServerResponse > ) routerFunction ) ;
return this ;
return this ;
}
}
private RouterFunctions . Builder add ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
private < T extends ServerResponse > RouterFunctions . Builder add ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
this . routerFunctions . add ( RouterFunctions . route ( predicate , handlerFunction ) ) ;
return add ( RouterFunctions . route ( predicate , handlerFunction ) ) ;
return this ;
}
}
// GET
// GET
@Override
@Override
public RouterFunctions . Builder GET ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder GET ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . GET ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . GET ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder GET ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder GET ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . GET ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . GET ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder GET ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder GET ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . GET ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . GET ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder GET ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder GET ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . GET ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . GET ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -90,23 +90,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// HEAD
// HEAD
@Override
@Override
public RouterFunctions . Builder HEAD ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder HEAD ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . HEAD ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . HEAD ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder HEAD ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder HEAD ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . HEAD ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . HEAD ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder HEAD ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder HEAD ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . HEAD ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . HEAD ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder HEAD ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder HEAD ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . HEAD ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . HEAD ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -114,23 +114,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// POST
// POST
@Override
@Override
public RouterFunctions . Builder POST ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder POST ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . POST ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . POST ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder POST ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder POST ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . POST ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . POST ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder POST ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder POST ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . POST ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . POST ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder POST ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder POST ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . POST ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . POST ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -138,23 +138,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// PUT
// PUT
@Override
@Override
public RouterFunctions . Builder PUT ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PUT ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . PUT ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . PUT ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PUT ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PUT ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . PUT ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . PUT ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PUT ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PUT ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . PUT ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . PUT ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PUT ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder PUT ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . PUT ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . PUT ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -162,23 +162,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// PATCH
// PATCH
@Override
@Override
public RouterFunctions . Builder PATCH ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PATCH ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . PATCH ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . PATCH ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PATCH ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PATCH ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . PATCH ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . PATCH ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PATCH ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder PATCH ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . PATCH ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . PATCH ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder PATCH ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder PATCH ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . PATCH ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . PATCH ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -186,23 +186,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// DELETE
// DELETE
@Override
@Override
public RouterFunctions . Builder DELETE ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder DELETE ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . DELETE ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . DELETE ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder DELETE ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder DELETE ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . DELETE ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . DELETE ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder DELETE ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder DELETE ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . DELETE ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . DELETE ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder DELETE ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder DELETE ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . DELETE ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . DELETE ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -210,23 +210,23 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// OPTIONS
// OPTIONS
@Override
@Override
public RouterFunctions . Builder OPTIONS ( HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder OPTIONS ( HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . OPTIONS ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . OPTIONS ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder OPTIONS ( RequestPredicate predicate , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder OPTIONS ( RequestPredicate predicate , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . method ( HttpMethod . OPTIONS ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . method ( HttpMethod . OPTIONS ) . and ( predicate ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder OPTIONS ( String pattern , HandlerFunction < ServerResponse > handlerFunction ) {
public < T extends ServerResponse > RouterFunctions . Builder OPTIONS ( String pattern , HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . OPTIONS ( pattern ) , handlerFunction ) ;
return add ( RequestPredicates . OPTIONS ( pattern ) , handlerFunction ) ;
}
}
@Override
@Override
public RouterFunctions . Builder OPTIONS ( String pattern , RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder OPTIONS ( String pattern , RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RequestPredicates . OPTIONS ( pattern ) . and ( predicate ) , handlerFunction ) ;
return add ( RequestPredicates . OPTIONS ( pattern ) . and ( predicate ) , handlerFunction ) ;
}
}
@ -234,8 +234,8 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
// other
// other
@Override
@Override
public RouterFunctions . Builder route ( RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder route ( RequestPredicate predicate ,
HandlerFunction < ServerResponse > handlerFunction ) {
HandlerFunction < T > handlerFunction ) {
return add ( RouterFunctions . route ( predicate , handlerFunction ) ) ;
return add ( RouterFunctions . route ( predicate , handlerFunction ) ) ;
}
}
@ -287,13 +287,14 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
return this ;
return this ;
}
}
@SuppressWarnings ( "unchecked" )
@Override
@Override
public RouterFunctions . Builder nest ( RequestPredicate predicate ,
public < T extends ServerResponse > RouterFunctions . Builder nest ( RequestPredicate predicate ,
Supplier < RouterFunction < ServerResponse > > routerFunctionSupplier ) {
Supplier < RouterFunction < T > > routerFunctionSupplier ) {
Assert . notNull ( routerFunctionSupplier , "RouterFunction Supplier must not be null" ) ;
Assert . notNull ( routerFunctionSupplier , "RouterFunction Supplier must not be null" ) ;
RouterFunction < ServerResponse > nestedRoute = routerFunctionSupplier . get ( ) ;
RouterFunction < ServerResponse > nestedRoute = ( RouterFunction < ServerResponse > ) routerFunctionSupplier . get ( ) ;
this . routerFunctions . add ( RouterFunctions . nest ( predicate , nestedRoute ) ) ;
this . routerFunctions . add ( RouterFunctions . nest ( predicate , nestedRoute ) ) ;
return this ;
return this ;
}
}
@ -306,17 +307,20 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
}
}
@Override
@Override
public RouterFunctions . Builder path ( String pattern ,
public < T extends ServerResponse > RouterFunctions . Builder path ( String pattern ,
Supplier < RouterFunction < ServerResponse > > routerFunctionSupplier ) {
Supplier < RouterFunction < T > > routerFunctionSupplier ) {
return nest ( RequestPredicates . path ( pattern ) , routerFunctionSupplier ) ;
return nest ( RequestPredicates . path ( pattern ) , routerFunctionSupplier ) ;
}
}
@SuppressWarnings ( "unchecked" )
@Override
@Override
public RouterFunctions . Builder filter ( HandlerFilterFunction < ServerResponse , ServerResponse > filterFunction ) {
public < T extends ServerResponse , R extends ServerResponse > RouterFunctions . Builder filter (
HandlerFilterFunction < T , R > filterFunction ) {
Assert . notNull ( filterFunction , "HandlerFilterFunction must not be null" ) ;
Assert . notNull ( filterFunction , "HandlerFilterFunction must not be null" ) ;
this . filterFunctions . add ( filterFunction ) ;
this . filterFunctions . add ( ( HandlerFilterFunction < ServerResponse , ServerResponse > ) filterFunction ) ;
return this ;
return this ;
}
}
@ -326,18 +330,19 @@ class RouterFunctionBuilder implements RouterFunctions.Builder {
return filter ( ( request , next ) - > next . handle ( requestProcessor . apply ( request ) ) ) ;
return filter ( ( request , next ) - > next . handle ( requestProcessor . apply ( request ) ) ) ;
}
}
@SuppressWarnings ( "unchecked" )
@Override
@Override
public RouterFunctions . Builder after (
public < T extends ServerResponse , R extends ServerResponse > RouterFunctions . Builder after (
BiFunction < ServerRequest , ServerResponse , ServerResponse > responseProcessor ) {
BiFunction < ServerRequest , T , R > responseProcessor ) {
Assert . notNull ( responseProcessor , "ResponseProcessor must not be null" ) ;
Assert . notNull ( responseProcessor , "ResponseProcessor must not be null" ) ;
return filter ( ( request , next ) - > next . handle ( request )
return filter ( ( request , next ) - > next . handle ( request )
. map ( serverResponse - > responseProcessor . apply ( request , serverResponse ) ) ) ;
. map ( serverResponse - > responseProcessor . apply ( request , ( T ) serverResponse ) ) ) ;
}
}
@Override
@Override
public RouterFunctions . Builder onError ( Predicate < ? super Throwable > predicate ,
public < T extends ServerResponse > RouterFunctions . Builder onError ( Predicate < ? super Throwable > predicate ,
BiFunction < ? super Throwable , ServerRequest , Mono < ServerResponse > > responseProvider ) {
BiFunction < ? super Throwable , ServerRequest , Mono < T > > responseProvider ) {
Assert . notNull ( predicate , "Predicate must not be null" ) ;
Assert . notNull ( predicate , "Predicate must not be null" ) ;
Assert . notNull ( responseProvider , "ResponseProvider must not be null" ) ;
Assert . notNull ( responseProvider , "ResponseProvider must not be null" ) ;