package Ġcom . oly mp ians . ae ol us . utils Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġcom . alibaba . fastjson . JSON Ċ import Ġcom . oly mp ians . ae ol us . Ae ol us Request Ċ import Ġcom . oly mp ians . ae ol us . annotations . Get Ċ import Ġcom . oly mp ians . ae ol us . annotations . Post Ċ import Ġcom . oly mp ians . ae ol us . annotations . Query Ċ import Ġcom . oly mp ians . ae ol us . annotations . Strip Ċ import Ġcom . oly mp ians . ae ol us . config . Ae ol us Config Ċ import Ġjava . net . URL Encoder Ċ Ċ internal Ġobject ĠAnnotation Tools Ġ{ ĊĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ KEY _ HOST Ġ= Ġ" HOST " ĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ KEY _ API Ġ= Ġ" API " ĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ KEY _ TYPE Ġ= Ġ" TYPE " ĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ KEY _ METHOD Ġ= Ġ" METHOD " ĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ KEY _ BODY Ġ= Ġ" BODY " ĊĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ VALUE _ GET Ġ= Ġ" GET " ĊĠĠĠ Ġinternal Ġconst Ġval ĠMAP _ VALUE _ POST Ġ= Ġ" POST " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġextract Ġparameters Ġfrom Ġrequest ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest ĠRequest Ġobject Ġimplemented Ġwith ĠA eol us Request ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġmap Ġinclude Ġparameters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġextract Params ( request : ĠA eol us Request ?): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġrequest ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠKotlin NullPointerException (" Request Ġcan Ġnot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġrequest . java Class ĊĊĠĠĠĠĠĠĠ Ġval Ġget Anno Ġ= Ġclazz . getAnnotation ( Get :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġpost Anno Ġ= Ġclazz . getAnnotation ( Post :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġget Anno Ġ&& Ġnull Ġ== Ġpost Anno ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Request Ġmust Ġbe Ġannotated Ġwith ĠGet Ġor ĠPost ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġget Anno Ġ&& Ġnull Ġ!= Ġpost Anno ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Request Ġcan Ġnot Ġbe Ġannotated Ġwith ĠGet Ġand ĠPost Ġat Ġthe Ġsame Ġtime ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= ĠA eol us Config . getHost () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġget Anno ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Host Ġ= Ġget Anno . host . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Api Ġ= Ġget Anno . api . trim () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ== Ġget Host ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġhost Ġ&& Ġhost . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ HOST ] Ġ= Ġhost ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" You Ġshould Ġadd Ġone Ġhost ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ HOST ] Ġ= Ġget Host ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= Ġget Api ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ API ] Ġ= Ġget Api ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ METHOD ] Ġ= ĠMAP _ VALUE _ GET ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecursion ( request , Ġclazz , Ġmap ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġpost Anno ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Host Ġ= Ġpost Anno . host . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Api Ġ= Ġpost Anno . api . trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġpost Anno . contentType ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ== Ġpost Host ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġhost Ġ&& Ġhost . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ HOST ] Ġ= Ġhost ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" You Ġshould Ġadd Ġone Ġhost ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ HOST ] Ġ= Ġpost Host ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= Ġpost Api ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ API ] Ġ= Ġpost Api ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= ĠcontentType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ TYPE ] Ġ= ĠcontentType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ TYPE ] Ġ= ĠContentType _ JSON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( contentType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContentType _ Multipart Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ BODY ] Ġ= Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtar Field Ġ= Ġclazz . declared Fields . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrip Anno Ġ= Ġit . getAnnotation ( Strip :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ!== Ġstrip Anno ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ BODY ] Ġ= Ġif Ġ( null Ġ=== Ġtar Field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJSON . toJSON String ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJSON . toJSON String ( tar Field . get ( request )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ MAP _ KEY _ METHOD ] Ġ= ĠMAP _ VALUE _ POST ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrecursion ( class Instance : ĠA eol us Request , Ġclazz : ĠClass < in ĠA eol us Request >, Ġmap : ĠMutable Map < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġclazz . declared Fields . filter Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . name . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ $ change " Ġ!= Ġit Ġ&& Ġ" serial VersionUID " Ġ!= Ġit Ġ&& Ġ" shadow \ $_ klass " Ġ!= Ġit Ġ&& Ġ" shadow \ $_ monitor " Ġ!= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġit . get ( class Instance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( k ) Ġ&& Ġnull Ġ!= Ġv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ k ] Ġ= ĠURL Encoder . encode ( v , Ġ" UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ k ] Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠsuperClass Ġ= Ġclazz . super class ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= ĠsuperClass ?. getAnnotation ( Query :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecursion ( class Instance , ĠsuperClass , Ġmap ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }