我正在Android上使用Retrofit(2.6)来实现服务,该服务连接到Web服务器,并要求服务器承担一些工作。相关代码可以总结如下:
interface MyService {
@GET(START_WORK)
suspend fun startWork(@Query("uuid") uuid: String,
@Query("mode") mode: Int):
MyStartWorkResponse
}
// Do some other things, include get a reference to a properly configured
// instance of Retrofit.
// Instantiate service
var service: MyService = retrofit.create(MyService::class.java)
我可以service.startWork()毫无问题地致电并获得有效的结果。但是,在某些情况下,Web服务器将返回400错误代码,其响应正文包括特定的错误信息。但是,该请求没有格式错误;只是有另一个问题应该引起用户的注意。麻烦在于,我无法分辨出问题所在,因为我没有得到回应。相反,由于400错误代码,我的呼叫引发了异常。
我不明白如何修改代码,以便可以捕获和处理400个错误响应,并从响应正文中获取所需的信息。这是我的okhttp客户端上的网络拦截器的工作吗?谁能阐明一些想法?
改造定义成功的响应如下:
public boolean isSuccessful(){返回代码> = 200 &&代码<300; }
这意味着你应该能够做这样的事情
class ServiceImpl(private val myService: MyService) {
suspend fun startWork(//query): MyResponse =
myService.startWork(query).await().let {
if (response.isSuccessful) {
return MyResponse(response.body()//transform
?: //some empty object)
} else {
throw HttpException(response)//or handle - whatever
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。