使用改进的 HttpException 捕获错误消息
Catching an error message with retrofit HttpException
我正在使用 Retrofit
向 API 发出一些请求,当我收到回复时,如果请求是成功
响应成功
{
"success": 1,
"error": [],
"data": [
// Some data..
]
}
如果有错误,响应将是这样的
响应失败
{
"success": 0,
"error": [
"Password is incorrect"
],
"data": []
}
现在的问题是万一有一个不成功的请求,它带有error code 403
,所以Retrofit将它归类为一个Exception并抛出一个HttpException
,那么我就没有办法捕捉到password is incorrect
消息附加在 json
响应中。
有什么办法即使出现 HttpException 也能得到正文响应吗?
更新
这是我正在使用的示例代码
ViewModel
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
好吧,我想出了一个方法来从传递的异常中取回响应。
正如我在问题中所说,这是我正在使用的代码
旧代码示例
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
然而,我不知道响应主体是异常传递的,您可以使用errorBody()
方法将其作为字符串接收,如下所示。
新代码示例
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
val response = e.response()?.errorBody()?.string()
}
}
然后您可以从那里操作此字符串以提取错误消息。
我正在使用 Retrofit
向 API 发出一些请求,当我收到回复时,如果请求是成功
响应成功
{
"success": 1,
"error": [],
"data": [
// Some data..
]
}
如果有错误,响应将是这样的
响应失败
{
"success": 0,
"error": [
"Password is incorrect"
],
"data": []
}
现在的问题是万一有一个不成功的请求,它带有error code 403
,所以Retrofit将它归类为一个Exception并抛出一个HttpException
,那么我就没有办法捕捉到password is incorrect
消息附加在 json
响应中。
有什么办法即使出现 HttpException 也能得到正文响应吗?
更新
这是我正在使用的示例代码
ViewModel
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
好吧,我想出了一个方法来从传递的异常中取回响应。
正如我在问题中所说,这是我正在使用的代码
旧代码示例
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
然而,我不知道响应主体是异常传递的,您可以使用errorBody()
方法将其作为字符串接收,如下所示。
新代码示例
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
val response = e.response()?.errorBody()?.string()
}
}
然后您可以从那里操作此字符串以提取错误消息。