import Ġcom . google . gson . Gson Ċ import Ġio . vertx . core . AsyncResult Ċ import Ġio . vertx . core . Future Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . core . json . Json Ċ import Ġio . vertx . ext . web . Router Ċ import Ġio . vertx . ext . web . Routing Context Ċ import Ġio . vertx . ext . web . handler . Body Handler Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠStep 0 2 Ġ- ĠIn Ġmemory ĠREST ĠUser Ġrepository Ċ Ġ*/ Ċ Ċ object ĠVert x 3 Kotlin Rest Jdbc Tutorial Ġ{ ĊĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠ Ġ@ Jvm Static Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġ 9 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġvert x Ġ= ĠVert x . vertx () ĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġvert x . create HttpServer () ĊĠĠĠĠĠĠĠ Ġval Ġrouter Ġ= ĠRouter . router ( vertx ) ĊĠĠĠĠĠĠĠ Ġrouter . route (). handler ( Body Handler . create ()) Ġ Ġ// ĠRequired Ġfor ĠRouting Context . body AsString ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠMemory UserService () ĊĊĠĠĠĠĠĠĠ Ġrouter . get ("/ : userId "). handler Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġctx . request (). getParam (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Response ( ctx , ĠuserService . getUser ( userId )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrouter . post ("/ "). handler Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġjson Request < User >( ctx , ĠUser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Response ( ctx , ĠuserService . add User ( user )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrouter . delete ("/ : userId "). handler Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġctx . request (). getParam (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Response ( ctx , ĠuserService . rem User ( userId )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver . request Handler Ġ{ Ġrouter . accept ( it ) Ġ}. listen ( port ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . succeeded ()) Ġprintln (" Server Ġlistening Ġat Ġ$ port ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġprintln ( it . cause ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġjson Request < T >( ctx : ĠRouting Context , Ġclazz : ĠK Class < out ĠAny >): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġgson . fromJson ( ctx . body AsString , Ġclazz . java ) Ġas ĠT ĊĊĊĠĠĠ Ġfun Ġjson Response < T >( ctx : ĠRouting Context , Ġfuture : ĠFuture < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfuture . set Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . succeeded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġif Ġ( it . result () Ġ== Ġnull ) Ġ"" Ġelse Ġgson . toJson ( it . result ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . response (). end ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . response (). set StatusCode ( 5 0 0 ). end ( it . cause (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ Ċ //----------------------------------------------------------------------------- Ċ // ĠAPI Ċ Ċ data Ġclass ĠUser ( val Ġid : String , Ġval Ġfname : ĠString , Ġval Ġl name : ĠString ) Ċ Ċ interface ĠUserService Ġ{ ĊĊĠĠĠ Ġfun ĠgetUser ( id : ĠString ): ĠFuture < User > ĊĠĠĠ Ġfun Ġadd User ( user : ĠUser ): ĠFuture < Unit > ĊĠĠĠ Ġfun Ġrem User ( id : ĠString ): ĠFuture < Unit > Ċ } ĊĊĊ Ċ //----------------------------------------------------------------------------- Ċ // ĠIMP LEMENT ATION Ċ Ċ class ĠMemory UserService (): ĠUserService Ġ{ ĊĊĠĠĠ Ġval Ġ_ users Ġ= ĠHashMap < String , ĠUser >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd User ( User (" 1 ", Ġ" user 1 _ fname ", Ġ" user 1 _ lname ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser ( id : ĠString ): ĠFuture < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(_ users . containsKey ( id )) ĠFuture . succeeded Future (_ users . get Or Implicit Default ( id )) ĊĠĠĠĠĠĠĠ Ġelse ĠFuture . failed Future ( IllegalArgumentException (" Unknown Ġuser Ġ$ id ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd User ( user : ĠUser ): ĠFuture < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ users . put ( user . id , Ġuser ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFuture . succeeded Future () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrem User ( id : ĠString ): ĠFuture < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ users . remove ( id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFuture . succeeded Future () ĊĠĠĠ Ġ} Ċ }