@@ -585,6 +585,10 @@ public EnvDep(final Predicate<String> predicate, final Consumer<Config> callback
585585 /** stop callback . */
586586 private List <CheckedConsumer <Registry >> onStop = new ArrayList <>();
587587
588+ /** Mappers .*/
589+ @ SuppressWarnings ("rawtypes" )
590+ private Mapper mapper ;
591+
588592 public Jooby () {
589593 this (null );
590594 }
@@ -3401,23 +3405,31 @@ public void start(final String[] args) throws Throwable {
34013405 public void start (final String [] args , final Consumer <List <Route .Definition >> routes )
34023406 throws Throwable {
34033407 long start = System .currentTimeMillis ();
3408+
34043409 // shutdown hook
34053410 Runtime .getRuntime ().addShutdownHook (new Thread (() -> stop ()));
34063411
34073412 this .injector = bootstrap (args (args ), routes );
34083413
34093414 started .set (true );
34103415
3411- Config config = injector .getInstance (Config .class );
3416+ Config conf = injector .getInstance (Config .class );
34123417
34133418 Logger log = LoggerFactory .getLogger (getClass ());
3414- log .debug ("config tree:\n {}" , configTree (config .origin ().description ()));
3419+ log .debug ("config tree:\n {}" , configTree (conf .origin ().description ()));
34153420
34163421 // start services
34173422 for (CheckedConsumer <Registry > onStart : this .onStart ) {
34183423 onStart .accept (this );
34193424 }
34203425
3426+ // route mapper
3427+ Set <Route .Definition > routeDefs = injector .getInstance (Route .KEY );
3428+ Set <WebSocket .Definition > sockets = injector .getInstance (WebSocket .KEY );
3429+ if (mapper != null ) {
3430+ routeDefs .forEach (it -> it .map (mapper ));
3431+ }
3432+
34213433 // Start server
34223434 Server server = injector .getInstance (Server .class );
34233435 String serverName = server .getClass ().getSimpleName ().replace ("Server" , "" ).toLowerCase ();
@@ -3426,17 +3438,26 @@ public void start(final String[] args, final Consumer<List<Route.Definition>> ro
34263438 long end = System .currentTimeMillis ();
34273439
34283440 log .info ("[{}@{}]: Server started in {}ms\n \n {}\n " ,
3429- config .getString ("application.env" ),
3441+ conf .getString ("application.env" ),
34303442 serverName ,
34313443 end - start ,
3432- injector . getInstance ( AppPrinter . class ));
3444+ new AppPrinter ( routeDefs , sockets , conf ));
34333445
3434- boolean join = config .hasPath ("server.join" ) ? config .getBoolean ("server.join" ) : true ;
3446+ boolean join = conf .hasPath ("server.join" ) ? conf .getBoolean ("server.join" ) : true ;
34353447 if (join ) {
34363448 server .join ();
34373449 }
34383450 }
34393451
3452+ @ Override
3453+ @ SuppressWarnings ({"rawtypes" , "unchecked" })
3454+ public Jooby mapper (final Mapper mapper ) {
3455+ this .mapper = Optional .ofNullable (this .mapper )
3456+ .map (it -> Route .Mapper .compose (it , mapper ))
3457+ .orElse (mapper );
3458+ return this ;
3459+ }
3460+
34403461 /**
34413462 * Run app in javascript.
34423463 *
0 commit comments