如何使用Retrofit2和RxJava2获取标头

时间:2019-06-14 16:34:46

标签: android retrofit2 rx-java2

我有一个API,我需要从标题中提取信息并进行另一个调用。我尝试了多种方法,但似乎无法仅获取标头。没有其他回应。

我尝试过让它返回各种Response对象,例如okhttp3标头,Retrofit标头,HttpHeaders等,但是在第一个字符处获得了EOF。

api:

@POST("api/booking/search")
fun bookFlight(@Body bookFlightDetails: BookFlightDetails): Observable<Response<Headers>>

经理班:

class DataManager(context: AllegiantApplication, private val mApi: RxRestServices) {

fun bookFlight(bookingDetails: BookFlightDetails) : Observable<Response<Headers>>? {
    return mApi.bookFlight(bookingDetails)
}

并通过我的仓库获取它:

 fun bookFlight(bookingDetails: BookFlightDetails) {
    mDataManager.bookFlight(bookingDetails)
            ?.subscribeOn(Schedulers.io())
            ?.observeOn(AndroidSchedulers.mainThread())
            ?.subscribe({
                processHeader(it)
            }, {
                error ->  Log.d("TAG",  error.localizedMessage)  // <- EOF at 1st char
            }
            )
}

任何人都可以告诉我如何构造我的api调用以仅获取标头吗?

1 个答案:

答案 0 :(得分:0)

本月第二次,我已经回答了自己的问题。

这是两倍。 1)获得正确的响应类型。我去了

Observable<Response<ResponseBody>>

,这使我可以看到标题。但是,第二部分是我在将其发送到processHeader之前就将其使用。我正在给processHeader it消耗响应。我将订阅方法从更改为:

  processHeader(it)

收件人:

  val headers = it?.headers()
  processHeader(headers)

因此processHeaders只能看到可以正常“使用”响应的标头