Как получить ответ заголовка в Retrofit в Android? - PullRequest
0 голосов
/ 03 сентября 2018

Это моя конечная точка:

@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);

Я пытаюсь получить ответ, подобный этому:

requestService.requestStore(request)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.computation())
                .map(headers -> {
                   Log.d("Response",""+headers);
                    return headers;
                }).subscribe(headers -> {
                            Log.d("Response",""+headers);
                        },
                        error -> {
                           Log.d("ERRRROOOR","Error");
                        });

Я получаю сообщение об ошибке, как показано ниже:

Exception: retrofit2.adapter.rxjava.HttpException: HTTP 403 Forbidden

Находясь в почтальоне, я получаю ответ:

Connection →keep-alive
Content-Length →0
Content-Type →application/json; charset=utf-8
Date →Mon, 03 Sep 2018 18:47:30 GMT
MYid →f028df50-c8c5-4cce-92e7-70130345ba46

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы должны использовать Ответ в качестве модели ответа, потому что ваш API вводит поток ошибок с кодом 403

 @POST("v4/MyStore/data")
 Observable<Response<Void>> requestStore(@Body MyStoreRequest request);

теперь, когда вы потребляете ответ

 requestService.requestStore(request)
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.computation())
            .map(response -> {
               Log.d("Response",""+response);
                return response.header();
            }).subscribe(headers -> {
                        Log.d("Response",""+headers);
                    },
                    error -> {
                       Log.d("ERRRROOOR","Error");
                    });

response.header () вернет вам нужный заголовок, даже если ваш API потерпит неудачу

0 голосов
/ 04 сентября 2018

Возможно, вам не хватает заголовков в вашем запросе API от клиента Android. Согласно вашему комментарию , вы отправляете токен на предъявителя в заголовках авторизации.

Итак, вам нужно отправить токен на предъявителя вместе с телом запроса, как показано ниже

@Headers({
        "Authorization: Bearer <your_bearer_token_here>", /* change token here */
        "Content-Type: application/json"
})
@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);

Пример,

@Headers({
        "Authorization: Bearer ca0df98d-978c-410b-96ec-4e592a788c18",
        "Content-Type: application/json"
})
@POST("v4/MyStore/data")
Observable<Headers> requestStore(@Body MyStoreRequest request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...