开发者社区> 问答> 正文

Kotlin和Retrofit:如何处理HTTP 400响应?

我正在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客户端上的网络拦截器的工作吗?谁能阐明一些想法?

展开
收起
Puppet 2020-01-09 06:35:26 1016 0
1 条回答
写回答
取消 提交回答
  • 改造定义成功的响应如下:

    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
        }
    }
    
    }
    
    2020-01-09 06:35:41
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
CDN助力企业网站进入HTTPS时代 立即下载
低代码开发师(初级)实战教程 立即下载