package Ġio . ank bu rov . ml bridge . filter . pre Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . netflix . zu ul . context . RequestContext Ċ import Ġio . ank bu rov . ml bridge . utils . Constants . COR REL ATION _ ID Ċ import Ġio . ank bu rov . ml bridge . utils . getC orre lation Id Ċ import Ġio . ank bu rov . ml bridge . utils . getData Node Ċ import Ġio . ank bu rov . ml bridge . utils . is Method Ċ import Ġio . ank bu rov . ml bridge . wrapper . Update Body Request Wrapper Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ Ċ /** Ċ Ġ* ĠExtract Ġfrom Ġa Ġcanonical Ġrequest Ġmodel Ġcorrelation Ġid Ġand Ġdata , Ġand Ġset Ġdata Ġas Ġa Ġrequest Ġbody Ċ Ġ*/ Ċ @ Component Ċ class ĠTransform Request Filter ( private Ġval ĠobjectMapper : ĠObjectMapper ) Ġ: ĠAbstract Pre Filter () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġshould Filter (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRequest Context . getCurrent Context (). request . is Method ( HttpMethod . POST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter Order (): ĠInt Ġ= ĠInt . MIN _ VALUE ĊĊĠĠĠ Ġoverride Ġfun Ġrun (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRequest Context . getCurrent Context (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . content Length Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" HTTP Ġbody Ġcannot Ġbe Ġempty ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Tree Ġ= ĠobjectMapper . read Tree ( request . reader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrelation Id Ġ= Ġjson Tree . getC orre lation Id ()?. take Unless ( String :: isNull Or Blank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Correlation Id Ġmust Ġbe Ġpresent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ COR REL ATION _ ID ] Ġ= Ġcorrelation Id ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Node Ġ= Ġjson Tree . getData Node ()?. take Unless Ġ{ Ġit . isNull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Data Ġmust Ġbe Ġpresent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠobjectMapper . writeValue As Bytes ( data Node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġrequest . change RequestBody ( data ) Ġ// Ġupdate Ġthe Ġrequest Ġbody ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHttpServletRequest . change RequestBody ( data : ĠByteArray ) Ġ= ĊĠĠĠĠĠĠĠ ĠUpdate Body Request Wrapper ( this , Ġdata ) Ċ }