我在图书馆项目中使用RxJava进行改造。一切正常,我在请求数据时得到了预期的结果。
<VirtualHost myproject.dev>
DocumentRoot "path/to/folder/myproject"
ServerName myproject.dev
ServerAlias myproject.dev
<Directory "path/to/folder/myproject">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
来自API类:
@GET(Routes.ME)
fun getUserObservable(): Observable<User>
从使用此库的主项目中,我得到这样的用户:
fun getUser(): Observable<User> {
return usersService.getUserObservable()
}
一切正常,但如果发生API错误,那么API会发送给我们,例如:
api.getUser().observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe({ user ->
println("Get user success : $user")
}, { error ->
println("Get user error : $error")
})
我想要的是明确地将此错误提供给前端,这会产生此错误,因为直到现在,当我从错误Observable中获取错误时,前端无法解析我想要构建的错误。所以我的目的是从我的库中解析这个错误,用提供的API json构建一个错误POJO,并在前面得到错误时发送它。如果错误不是来自API,则前面应该会出现正常错误。
答案 0 :(得分:1)
您需要改装的实例才能将异常映射到错误响应。这是一个例子:
class Error(
var reason: String = "",
var details: String = "",
var type: String = ""
)
api.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ user ->
println("Get user success : $user")
}, { throwable ->
if (throwable is HttpException) {
val converter: Converter<ResponseBody, Error> = retrofit.responseBodyConverter(Error::class.java, emptyArray())
val error = converter.convert(throwable.response().errorBody())
println("Get user error : ${error.reason}")
} else {
println("Get user error : $throwable")
}
})