package Ġio . github . f om in . o as gen . java . spring . web Ċ Ċ import Ġio . github . f om in . o as gen .* Ċ import Ġio . github . f om in . o as gen . generator . Body Type Ċ import Ġio . github . f om in . o as gen . generator . body Type Ċ import Ġio . github . f om in . o as gen . generator . response 2 xx Ċ import Ġio . github . f om in . o as gen . java .* Ċ import Ġio . github . f om in . o as gen . java . dto . jackson . w static . Converter Matcher Provider Ċ import Ġio . github . f om in . o as gen . java . dto . jackson . w static . Converter Registry Ċ import Ġio . github . f om in . o as gen . java . dto . jackson . w static . Java Dto Writer Ċ Ċ class ĠJava Spring Mvc Server Writer ( ĊĠĠĠ Ġprivate Ġval Ġdto Package : ĠString , ĊĠĠĠ Ġprivate Ġval Ġroutes Package : ĠString , ĊĠĠĠ Ġprivate Ġval Ġconverter Ids : ĠList < String > Ċ ) Ġ: ĠWriter < Open Api Schema > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( items : ĠIterable < Open Api Schema >): ĠList < OutputFile > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Files Ġ= Ġmutable ListOf < OutputFile >() ĊĊĠĠĠĠĠĠĠ Ġval Ġconverter Matcher Ġ= ĠConverter Matcher Provider . provide ( dto Package , Ġroutes Package , Ġconverter Ids ) ĊĠĠĠĠĠĠĠ Ġval Ġconverter Registry Ġ= ĠConverter Registry ( converter Matcher ) ĊĠĠĠĠĠĠĠ Ġval Ġjava Dto Writer Ġ= ĠJava Dto Writer ( converter Registry ) ĊĠĠĠĠĠĠĠ Ġitems . forEach Ġ{ Ġopen Api Schema Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdto Schemas Ġ= Ġopen Api Schema . paths (). path Items (). map Ġ{ Ġ(_, Ġpath Item ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Item . operations (). map Ġ{ Ġoperation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Schemas Ġ= Ġoperation . parameters (). map Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Schemas Ġ= Ġwhen Ġ( val Ġrequest Body Ġ= Ġoperation . request Body ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequest Body . content (). map Ġ{ Ġ(_, Ġmedia TypeObject ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia TypeObject . schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Schemas Ġ= Ġoperation . responses (). by Code (). map Ġ{ Ġ(_, Ġresponse ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . content (). map Ġ{ Ġ(_, Ġmedia TypeObject ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia TypeObject . schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Schemas Ġ+ Ġrequest Body Schemas Ġ+ Ġresponse Body Schemas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdto Files Ġ= Ġjava Dto Writer . write ( dto Schemas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . addAll ( dto Files ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . add ( handler Adapter ( open Api Schema , Ġconverter Registry )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . add ( operations ( open Api Schema , Ġconverter Registry )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Files . add ( configuration ( open Api Schema )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoutput Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandler Adapter ( open Api Schema : ĠOpen Api Schema , Ġconverter Registry : ĠConverter Registry ): ĠOutput File Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" handler - adapter ") ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġget FilePath ( className ) ĊĠĠĠĠĠĠĠ Ġval Ġpath Entries Ġ= Ġopen Api Schema . paths (). path Items (). entries ĊĠĠĠĠĠĠĠ Ġval Ġpath Pattern Declarations Ġ= Ġpath Entries . map Indexed Ġ{ Ġindex , Ġ( path Pattern , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" private Ġstatic Ġfinal ĠPath Pattern Ġpath Pattern $ index Ġ= ĠPath Pattern Parser . default Instance . parse ("$ path Pattern "); """ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpath Pattern Match Expression Ġ= Ġpath Entries . map Indexed Ġ{ Ġindex , Ġ( path Pattern , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" path Pattern $ index . matches ( path Container ) """ ĊĠĠĠĠĠĠĠ Ġ}. join ToString ("\ n ĠĠĠ Ġ|| Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġoperations ClassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" operations ") ĊĠĠĠĠĠĠĠ Ġval Ġmatch Cases Ġ= Ġpath Entries . map Indexed Ġ{ Ġindex , Ġ(_, Ġpath Item ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Cases Ġ= Ġpath Item . operations (). map Ġ{ Ġoperation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġoperation . request Body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Type Ġ= Ġbody Type ( request Body ?. content ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck MediaType Block Ġ= Ġif Ġ( request Body Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | String ĠcontentType Ġ= Ġrequest . get ContentType (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| MediaType Ġmedia Type Ġ= ĠMediaType . parse MediaType ( contentType ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| if Ġ(! media Type . equals Type And Subtype ( MediaType . parse MediaType ("${ request Body Type . contentType } "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthrow Ġnew ĠUnsupportedOperationException ( contentType ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextract Body Block Ġ= Ġif Ġ( request Body Type Ġis ĠBody Type . Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverter Writer Ġ= Ġconverter Registry [ request Body Type . json Schema ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | JsonNode Ġjson Node Ġ= ĠobjectMapper . read Tree ( request . getInputStream ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ converter Writer . valueType ()} Ġrequest Body Dto Ġ= Ġ${ converter Writer . parse Expression (" json Node ") }; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( response Code , Ġresponse ) Ġ= Ġresponse 2 xx ( operation . responses ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Type Ġ= Ġbody Type ( response . content ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Variable Declaration Ġ= Ġif Ġ( response Body Type Ġis ĠBody Type . Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ converter Registry [ response Body Type . json Schema ]. valueType ()} Ġresponse Body Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Arg Ġ= Ġwhen Ġ( request Body Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Binary Ġ-> Ġ" request . getInputStream ()" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Json Ġ-> Ġ" request Body Dto " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Args Ġ= Ġ( operation . parameters (). map Indexed Ġ{ Ġindex , Ġ_ Ġ-> Ġ" param $ index " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġrequest Body Arg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġif Ġ( response Body Type Ġis ĠBody Type . Binary ) Ġ" response . get OutputStream ()" Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). filter NotNull (). join ToString (", \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite ResponseBody Block Ġ= Ġwhen Ġ( response Body Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Json Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite Expression Ġ= Ġconverter Registry [ response Body Type . json Schema ]. write Expression ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" json Generator ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" response Body " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | Json Generator Ġjson Generator Ġ= ĠobjectMapper . create Generator ( response . get OutputStream ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| List <? Ġextends ĠValidationError > Ġvalidation Errors Ġ= Ġ$ write Expression ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| json Generator . close (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| if Ġ(! validation Errors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthrow Ġnew ĠValidation Exception ( validation Errors ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Variables Definition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation . parameters (). any Ġ{ Ġparameter Ġ-> Ġparameter . parameter In Ġ== ĠParameter In . PATH Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Map < String , ĠString > Ġuri Variables Ġ= Ġpath Match Info $ index . get Uri Variables (); " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Definitions Ġ= Ġoperation . parameters (). map Indexed Ġ{ Ġindex , Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġparameter . schema () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Expression Ġ= Ġwhen Ġ( parameter . parameter In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter In . PATH Ġ-> Ġ""" uri Variables . get ("${ parameter . name }") """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter In . QUERY Ġ-> Ġ""" request . getParameter ("${ parameter . name }") """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter In . HEADER Ġ-> Ġ""" request . getHeader ("${ parameter . name }") """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverter Writer Ġ= Ġconverter Registry [ schema ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | String Ġparam ${ index } Str Ġ= Ġ$ parameter Expression ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ converter Writer . valueType ()} Ġparam $ index Ġ= Ġparam ${ index } Str Ġ!= Ġnull Ġ? Ġ${ converter Writer . string Parse Expression (" param ${ index } Str ")} Ġ: Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffective Response Code Ġ= Ġif Ġ( response Code Ġ== Ġ" 2 xx ") Ġ" 2 0 0 " Ġelse Ġresponse Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset ContentType Ġ= Ġwhen Ġ( response Body Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Json Ġ-> Ġ""" response . set ContentType (" application / json "); """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Binary Ġ-> Ġ""" response . set ContentType ("${ response Body Type . contentType }"); """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | if Ġ(" ${ operation . operation Type . name }". equals ( request . getMethod ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ$ url Variables Definition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ parameter Definitions . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ check MediaType Block . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ extract Body Block . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġresponse . setStatus ($ effective Response Code ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ$ set ContentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ response Variable Declaration } operations .${ to MethodName ( operation . operation Id )} ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ${ operation Args . indent With Margin ( 3 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ write ResponseBody Block . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | Path Pattern . Path Match Info Ġpath Match Info $ index Ġ= Ġpath Pattern $ index . match And Extract ( path Container ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| if Ġ( path Match Info $ index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ operation Cases . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | package Ġ${ get Package ( className )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . fasterxml . jackson . core . Json Generator ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . fasterxml . jackson . databind . JsonNode ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . fasterxml . jackson . databind . ObjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . github . f om in . o as gen . Matching Handler Adapter ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . github . f om in . o as gen . ValidationError ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . github . f om in . o as gen . ValidationException ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . List ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjava . util . Map ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjavax . servlet . http . HttpServletRequest ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjavax . servlet . http . HttpServletResponse ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . http . MediaType ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . http . server . Path Container ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . http . server . Request Path ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . lang . NonNull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . web . servlet . Model AndView ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . web . util . pattern . Path Pattern ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . web . util . pattern . Path Pattern Parser ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass Ġ${ getSimpleName ( className )} Ġimplements ĠMatch ing Handler Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ path Pattern Declarations . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal ĠString ĠbaseUrl ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal Ġ$ operations ClassName Ġoperations ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal ĠObjectMapper ĠobjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġ${ getSimpleName ( className )} ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ ĠString ĠbaseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ$ operations ClassName Ġoperations , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ ĠObjectMapper ĠobjectMapper ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis . baseUrl Ġ= ĠbaseUrl ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis . operations Ġ= Ġoperations ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis . object Mapper Ġ= ĠobjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġboolean Ġsupports (@ NonNull ĠObject Ġhandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġhandler Ġ== Ġthis ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic ĠModelAndView Ġhandle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NonNull ĠHttpServletRequest Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NonNull ĠHttpServletResponse Ġresponse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NonNull ĠObject Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) Ġthrows ĠException Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPath Container Ġpath Container Ġ= ĠRequest Path . parse ( request . get Servlet Path (), ĠbaseUrl ). path Within Application (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ${ match Cases . indent With Margin ( 2 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġresponse . setStatus ( 4 0 4 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġlong ĠgetLast Modified ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NonNull ĠHttpServletRequest Ġrequest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NonNull ĠObject Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġboolean Ġmatches ( HttpServletRequest Ġrequest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġif Ġ(! request . get Servlet Path (). startsWith ( baseUrl )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ ĠPath Container Ġpath Container Ġ= ĠRequest Path . parse ( request . get Servlet Path (), ĠbaseUrl ). path Within Application (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġ${ path Pattern Match Expression . indent With Margin ( 3 )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠĠĠĠĠ Ġreturn ĠOutput File ( filePath , Ġcontent , ĠOutput FileType . ROUTE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġoperations ( open Api Schema : ĠOpen Api Schema , Ġconverter Registry : ĠConverter Registry ): ĠOutput File Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" operations ") ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġget FilePath ( className ) ĊĠĠĠĠĠĠĠ Ġval Ġmethods Ġ= Ġopen Api Schema . paths (). path Items (). entries . map Ġ{ Ġ(_, Ġpath Item ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Item . operations (). map Ġ{ Ġoperation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġresponse ) Ġ= Ġresponse 2 xx ( operation . responses ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Type Ġ= Ġbody Type ( response . content ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġif Ġ( response Body Type Ġis ĠBody Type . Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Registry [ response Body Type . json Schema ]. valueType () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Args Ġ= Ġoperation . parameters (). map Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnull Annotation Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . required Ġ-> Ġ"@ Nonnull " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"@ Nullable " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ null Annotation Ġ${ converter Registry [ parameter . schema ()]. valueType ()} Ġ${ to Variable Name ( parameter . name )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġoperation . request Body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Type Ġ= Ġbody Type ( request Body ?. content ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Arg Ġ= Ġwhen Ġ( request Body Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Json Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Type Ġ= Ġconverter Registry [ request Body Type . json Schema ]. valueType () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" @ Nonnull Ġ$ valueType Ġ${ to Variable Name ( getSimpleName ( valueType ))} """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBody Type . Binary Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" @ Nonnull Ġjava . io . InputStream ĠinputStream """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Arg Ġ= Ġif Ġ( response Body Type Ġis ĠBody Type . Binary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" @ Nonnull Ġjava . io . OutputStream ĠoutputStream """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexceptions Ġ= Ġif Ġ( request Body Type Ġis ĠBody Type . Binary Ġ|| Ġresponse Body Type Ġis ĠBody Type . Binary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġthrows Ġjava . io . IOException " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġ( parameter Args Ġ+ Ġrequest Body Arg Ġ+ Ġresponse Body Arg ). filter NotNull (). join ToString (", \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | ${ returnType } Ġ${ to MethodName ( operation . operation Id )} ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ${ args . indent With Margin ( 2 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| )$ exceptions ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. flatten () ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | package Ġ${ get Package ( className )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjavax . annotation . Nonnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġjavax . annotation . Nullable ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġinterface Ġ${ getSimpleName ( className )} Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ${ methods . indent With Margin ( 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġreturn ĠOutput File ( filePath , Ġcontent , ĠOutput FileType . ROUTE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfiguration ( open Api Schema : ĠOpen Api Schema ): ĠOutput File Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" configuration ") ĊĠĠĠĠĠĠĠ Ġval Ġoperations ClassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" operations ") ĊĠĠĠĠĠĠĠ Ġval Ġhandler Adapter ClassName Ġ= Ġto Java ClassName ( routes Package , Ġopen Api Schema , Ġ" handler - adapter ") ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġget FilePath ( className ) ĊĠĠĠĠĠĠĠ Ġval Ġoperation Simple Name Ġ= Ġget Simple Name ( operations ClassName ) ĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġname ) Ġ= ĠType Name . to TypeName ( open Api Schema ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" | package Ġ${ get Package ( className )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġcom . fasterxml . jackson . databind . ObjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . github . f om in . o as gen . Default Handler Adapter Mapping ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġio . github . f om in . o as gen . Matching Handler Adapter ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . beans . factory . annotation . Value ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . context . annotation . Bean ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . context . annotation . Configuration ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| import Ġorg . springframework . web . servlet . Handler Mapping ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| public Ġclass Ġ${ getSimpleName ( className )} Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal ĠString ĠbasePath ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal Ġ$ operation Simple Name Ġ${ to Variable Name ( operation Simple Name )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġprivate Ġfinal ĠObjectMapper ĠobjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġ${ getSimpleName ( className )} ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Value ("${ '$ ' }{ ${ operations ClassName }. basePath : }") ĠString ĠbasePath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġ$ operation Simple Name Ġ${ to Variable Name ( operation Simple Name )}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ ĠObjectMapper ĠobjectMapper ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis . basePath Ġ= ĠbasePath ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis .${ to Variable Name ( operation Simple Name )} Ġ= Ġ${ to Variable Name ( operation Simple Name )}; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġthis . object Mapper Ġ= ĠobjectMapper ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic ĠHandler Mapping Ġ${ lower First ( name )} Handler Mapping () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġnew ĠDefault Handler Adapter Mapping (${ lower First ( name )} Handler Adapter ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic ĠMatch ing Handler Adapter Ġ${ lower First ( name )} Handler Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġnew Ġ${ getSimpleName ( handler Adapter ClassName )} ( basePath , Ġ${ to Variable Name ( operation Simple Name )}, ĠobjectMapper ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġreturn ĠOutput File ( filePath , Ġcontent , ĠOutput FileType . ROUTE ) ĊĠĠĠ Ġ} Ċ } Ċ