簡體   English   中英

如何在 Android 中的 retrofit 響應中添加多個標頭

[英]How to add multiple headers in retrofit responses in Android

在我的應用程序中,我想從服務器獲取一些數據,為此我使用了 retrofit
我應該添加一些標題,但在運行應用程序后顯示ForceClose錯誤!

ApiService 代碼:

interface ApiServices {
    @Headers(
        "Accept: application/json",
        "Content-Type : application/json"
    )
    @POST("user/get-password")
    fun sendPhoneNumber(@Body body: LoginSendPhoneBody): Single<Response<LoginSendPhoneResponse>>

    @Headers(
        "Accept: application/json",
        "Content-Type : application/json"
    )
    @POST("addresses")
    fun newAddress(@Header("Authorization") userToken: String, @Body body: NewAddressBody):
            Single<Response<NewAddressResponse>>
}

我的 Retrofit 版本是2.5.0

在我閱讀的retrofit文檔中設置多個header我應該使用{}標題中,例如@Headers({...}) ,但在添加{}后顯示錯誤,我不能使用{}

日志錯誤:

java.lang.IllegalArgumentException: Unexpected char 0x20 at 12 in header name: Content-Type 
    at okhttp3.Headers.checkName(Headers.java:261)
    at okhttp3.Headers$Builder.add(Headers.java:311)
    at retrofit2.RequestFactory$Builder.parseHeaders(RequestFactory.java:283)
    at retrofit2.RequestFactory$Builder.parseMethodAnnotation(RequestFactory.java:224)
    at retrofit2.RequestFactory$Builder.build(RequestFactory.java:161)
    at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:65)
    at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:25)
    at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:168)
    at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
    at java.lang.reflect.Proxy.invoke(Proxy.java:913)
    at $Proxy2.sendPhoneNumber(Unknown Source)
    at com.app.app.data.network.ApiUseCase.getSendPhoneNumber(ApiUseCase.kt:42)

我該如何解決?

改變

"Content-Type : application/json"

"Content-Type: application/json"

只需刪除Content-Type后的空白:)

您可以使用 HeaderMap,同樣

val header = HashMap<String, String>()
    header["Accept"] = "application/json"
    header["Content-Type"] = "application/json"
    header["Authorization"] = "userToken"



@POST("addresses")
    fun newAddress(@HeaderMap headers: Map<String, String>, @Body body: NewAddressBody): Single<Response<NewAddressResponse>>

在 Kotlin API 界面:

@Headers(
    "Accept: application/json",
    "User-Agent : PostmanRuntime/7.29.0",
    "Accept : */*",
    "Accept-Encoding : gzip, deflate, br",
    "Connection : keep-alive"

)

你可以像這樣使用你的方法:

 fun callLoginAPI(@HeaderMap header: Map<String, String>)

調用此方法時只需創建地圖添加所有標題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM