package Ġsample . kotlin . xyz . sr cl ab . spring . boot . web . servlet Ċ Ċ import Ġorg . apache . commons . io . IO Utils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . boot . autoconfigure . Enable Auto Configuration Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . web . client . Test Rest Template Ċ import Ġorg . springframework . boot . web . server . Local Server Port Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . http . converter . json . Mapping Jack son 2 Http Message Converter Ċ import Ġorg . springframework . test . context . testng . Abstract Test NG Spring Context Tests Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RestController Ċ import Ġorg . springframework . web . filter . Once Per Request Filter Ċ import Ġorg . springframework . web . servlet . Model AndView Ċ import Ġorg . testng . Assert Ċ import Ġorg . testng . annotations . Test Ċ import Ġxyz . sr cl ab . common . exception . Exception Status Ċ import Ġxyz . sr cl ab . spring . boot . web . exception . Exception ResponseBody Ċ import Ġxyz . sr cl ab . spring . boot . web . exception . to Exception ResponseBody Ċ import Ġxyz . sr cl ab . spring . boot . web . servlet . to Prepared HttpServletRequest Ċ import Ġxyz . sr cl ab . spring . boot . web . servlet . write From Response Entity Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . util .* Ċ import Ġjavax . annotation . Resource Ċ import Ġjavax . servlet . FilterChain Ċ import Ġjavax . servlet . Servlet Exception Ċ import Ġjavax . servlet . Servlet OutputStream Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . servlet . http . HttpServletResponse Ċ Ċ @ SpringBootTest ( ĊĠĠĠ Ġclasses Ġ= Ġ[ Test Controller :: class , ĠTest Filter :: class ], ĊĠĠĠ Ġweb Environment Ġ= ĠSpring Boot Test . Web Environment . RANDOM _ PORT Ċ ) Ċ @ Enable Auto Configuration Ċ class ĠServlet Sample Ġ: ĠAbstract Test NG Spring Context Tests () Ġ{ ĊĊĠĠĠ Ġ@ Local Server Port ĊĠĠĠ Ġprivate Ġvar Ġport Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Resource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrest Template : ĠTest Rest Template ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Servlet () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template !!. post For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost :$ port / test / servlet ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pp p 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog . info ("/ test / servlet : Ġ$ result ") ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( result , Ġ" pp p 1 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Index () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template !!. post For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost :$ port / test / index ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pp p 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog . info ("/ test / index : Ġ$ result ") ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( result , Ġ" encode : Ġp pp 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Exception () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrest Template !!. get For Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost :$ port / test / exception ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠException ResponseBody :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlog . info ("/ test / exception : Ġ$ result ") ĊĠĠĠĠĠĠĠ Ġlog . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ test / exception : Ġ" Ġ+ Ġrest Template . get For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// localhost :$ port / test / exception ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Objects . requireNonNull ( result . body ). code , ĠException Status . INTERNAL . code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Servlet Sample :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ RequestMapping (" test ") Ċ @ RestController Ċ class ĠTest Controller Ġ{ ĊĊĠĠĠ Ġ@ RequestMapping (" servlet ") ĊĠĠĠ Ġfun Ġtest Servlet ( p 1 : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġp 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping (" index ") ĊĠĠĠ Ġfun Ġtest Index ( p 1 : ĠString ?): ĠModelAndView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel : ĠMutable Map < String , ĠAny ?> Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġmodel [" pm "] Ġ= Ġp 1 ĊĠĠĠĠĠĠĠ Ġreturn ĠModelAndView (" encode ", Ġmodel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping (" encode ") ĊĠĠĠ Ġfun Ġtest Encode ( pm : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" encode : Ġ$ pm " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping (" exception ") ĊĠĠĠ Ġfun Ġtest Exception (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" hello ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTest Filter Ġ: ĠOnce Per Request Filter () Ġ{ ĊĊĠĠĠ Ġ@ Resource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmapping Jack son 2 Http Message Converter : ĠMapping Jack son 2 Http Message Converter ĊĊĠĠĠ Ġ@ Throws ( Servlet Exception :: class , ĠIOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdo Filter Internal ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠHttpServletRequest , ĊĠĠĠĠĠĠĠ Ġresponse : ĠHttpServletResponse , ĊĠĠĠĠĠĠĠ Ġfilter Chain : ĠFilter Chain ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= ĠIO Utils . toString ( request . inputStream , ĠStandard Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġparameters : ĠMutable Map < String , ĠList < String >> Ġ= Ġjava . util . HashMap () ĊĠĠĠĠĠĠĠ Ġparameters [" p 1 "] Ġ= ĠlistOf ( p 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Request : ĠHttpServletRequest Ġ= Ġrequest . to Prepared HttpServletRequest ( parameters ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Chain . do Filter ( new Request , Ġresponse ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠHttp Headers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader [ HttpHeaders . CONTENT _ TYPE ] Ġ= Ġ" application / json " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Entity Ġ= ĠResponseEntity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . to Exception ResponseBody (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatus . INTERNAL _ SERVER _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . write From Response Entity ( response Entity ) Ġ{ Ġbody : ĠAny ?, Ġout : ĠServlet OutputStream ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping Jack son 2 Http Message Converter . object Mapper . writeValue ( out , Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( io Exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( io Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }