
рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╣рд░ рдХреЛрдИ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдХреБрдЫ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ - рдпрджрд┐ рдЕрдкрд╡рд╛рдж рд▓рд╛рдЦреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЦрдмрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдПрдХ рдЖрддрдВрдХ рдИрдореЗрд▓ рдореЗрдВ рдЖрддреА рд╣реИред рд╢рдирд┐рд╡рд╛рд░ рдХреА рд╕реБрдмрд╣ред рдЬрдм рдЖрдк рдХрд┐рд╕реА рджреЗрд╢ рдХреА рдпрд╛рддреНрд░рд╛ рдкрд░ рд╣реЛрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ - рдФрд░ рдХреНрдпрд╛ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?
рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдХреИрдЪред рдореЗрд░реЗ рд▓рд┐рдП - рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рдпрд╣ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рдмрд╛рдж рд╣реИ (рдХреЛрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдордЬрдмреВрд░ рд░реИрдкрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рд╕реЗ рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
- рдпрд╣ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП) рдХреИрдЪ рдмреНрд▓реЙрдХ рд╕реЗ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХреЛрдб рдХреНрдпрд╛ рдкрдХрдбрд╝рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдп
fun makeRequest(request: RequestBody): List<ResponseData>? { val response = httpClient.newCall(request).execute() return if (response.isSuccessful) { val body = response.body()?.string() val json = ObjectMapper().readValue(body, MyCustomResponse::class.java) json?.data } else { null } }
рдЬреИрд╕рд╛ рдмрдирддрд╛ рд╣реИ
fun makeRequest(request: RequestBody): List<ResponseData>? { try { val response = httpClient.newCall(request).execute() return if (response.isSuccessful) { val body = response.body()?.string() val json = ObjectMapper().readValue(body, MyCustomResponse::class.java) json?.data } else { null } } catch (e: Exception) { log.error("SON YOU DISSAPOINT: ", e.message) return null } }
рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛, "рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ," рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, "рдЖрдк рдФрд░ рдЖрдкрдХреА рдХреЛрдЯрд▓рд┐рди рд╕рднреА рдХреЛрдб рдЪреАрдиреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ," рд╡рд╣ рдХрд╣рддреЗ рд╣реИрдВ (рдпрд╣ рдПрдХ рдЙрджреНрдзрд░рдг рд╣реИ) - рдФрд░ рд╡рд╣ рджреЛ рдмрд╛рд░ рд╕рд╣реА рд╣реЛрдЧрд╛ред рдирд╣реАрдВ, рдЖрдЬ рдХреЛрдИ рд╣реЛрд▓реАрд╡рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдЬреМрди рдкрд╛рд░реНрд╕рд░ рдХреЗ рдХреЛрдб рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╢рд╛рд╕рд┐рдд рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЯреНрд░рд╛рдЗ-рдХреИрдЪ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рдерд╛, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдЦрд╛рд▓реА рдерд╛ред рдпрджрд┐ рдХреЛрдИ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрддреБрд╖реНрдЯ рд╣реИ - рдЙрд╕рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдПрдХ рдЭрдВрдбрд╛ред рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ:
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдХрд╣реАрдВ
рднреА ред рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рдпрд╛ рддреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
рдПрд░реЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд╕рд╛рде рдЗрди рд╕рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
fun makeRequest(request: RequestBody): Try<List<ResponseData>> = Try { val response = httpClient.newCall(request).execute() if (response.isSuccessful) { val body = response.body()?.string() val json = ObjectMapper().readValue(body, MyCustomResponse::class.java) json?.data } else { emptyList() } }
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЯреНрд░рд╛рдЗ-рдХреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬреЛ рдХреЛрдИ рднреА рдЖрдкрдХреЗ рдмрд╛рдж рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ (рдФрд░ рд╡реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд▓рд┐рдЦреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рдкрде рд▓реЗрдЧрд╛ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░реЗ, рдЗрд╕рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрдирд╕рд╛рдЗрдб рдЯреНрд░рд╛рдИ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рддреНрд░реБрдЯрд┐ рдпрд╛ рд╕рдлрд▓рддрд╛ рдХреЛ рдХреНрд░рдорд╢рдГ рд╡рд┐рдлрд▓рддрд╛ рдФрд░ рд╕рдлрд▓рддрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐ рдкрд░ рдХреБрдЫ рд▓реМрдЯрд╛рдП, рддреЛ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
makeRequest(request).getOrElse { emptyList() }
рдпрджрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЧреБрдирд╛ рдЖрддрд╛ рд╣реИ:
makeRequest(request).fold( {ex ->
рдЖрдк рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрджрд┐ рд░рд┐рдЯрд░реНрди рд╕рдлрд▓рддрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреА рдЬрд╛рдПрдЧреАред
makeRequest(request).recover { emptyList() }
рдпрджрд┐ рдЖрдк рдХреЛрд╢рд┐рд╢ рдкрд░ .monad () рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдлрд▓рддрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реНрдХрд╛рд▓рд╛ рд╕реЗ рдПрд░реЛ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдзрд╛рд░)ред
Try.monad().binding { val r = httpclient.makeRequest(request) val data = r.recoverWith { Try.pure(emptyList()) }.bind() val result: MutableList<Data> = data.toMutableList() result.add(Data()) yields(result) }
рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдКрдкрд░ рд╡рд┐рдХрд▓реНрдк рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛:
httpcilent.makeRequest(request) .recoverWith { Try.pure(emptyList()) } .flatMap { data -> val result: MutableList<Data> = data.toMutableList() result.add(Data()) Try.pure(result) }
рдЕрдВрдд рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
when(response) { is Try.Success -> response.data.toString() is Try.Failure -> response.exception.message }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреБрдЫ рд▓рдЪреАрд▓реЗ рдФрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреЗ рд╕рд╛рде рдЖрджрд░реНрд╢ рдХреЛрд╢рд┐рд╢-рдХреИрдЪ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЦреБрдж рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЖрдк рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдУрдУрдкреА рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП рд╡рд╣рд╛рдВ рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрджрд╛рд╣рд░рдг (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣реА рдХреЛрд╢рд┐рд╢) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдореЗрдВ рдЖрдк рд╣рд╛рд╕реНрдХреЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдФрд░ рдЖрдкрдХреЗ рд╕рд╣рдХрд░реНрдореА рдЬрд▓реНрдж рд╣реА рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдВрдЧреЗред
рдкреБрдирд╢реНрдЪ: рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ :)