Модернизация возвращает ноль, когда мой API отвечает 404

У меня есть API. Он возвращает 404, когда он не содержит данных в базе данных. Retrofit 2 возвращает нулевой ответ, когда мой API возвращает 404 в качестве кода ответа.

Активность штрих-кода:

LnkBarcodeBaptizeCheckModel lnkModel = new LnkBarcodeBaptizeCheckModel();
                        List<String> bap_barcodes = new ArrayList<String>();
                        bap_barcodes.add(barcode);
                        lnkModel.bap_barcodes = bap_barcodes;Call<LnkBarcodeBaptizeCheckResponseModel> lnkCall = apiInterface.CheckLnkBarcodeBaptizeTable(lnkModel);
                        LnkBarcodeBaptizeCheckResponseModel lnkResponse = new MainAynscTask<LnkBarcodeBaptizeCheckResponseModel>().execute(lnkCall).get();

Клиент:

private static Retrofit retrofit = null;

public static Retrofit getClient() {

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

    Gson gson = new GsonBuilder().create();

    retrofit = new Retrofit.Builder()
            .baseUrl("http://localserver/IndustrialApplicationsAPI/api/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build();



    return retrofit;
}

}

Почтовый метод:

@POST("CuringPhase/CheckLnkBarcodeBaptizeTable")
Call<LnkBarcodeBaptizeCheckResponseModel> CheckLnkBarcodeBaptizeTable(@Body LnkBarcodeBaptizeCheckModel trcModel);

 

Вызов дооснащения:

public class MainAynscTask<T> extends AsyncTask<Call<T>, Void, T> {

@Override
protected T doInBackground(Call<T>... call) {
    T responseModel = null;
    try {
        responseModel = call[0].execute().body();
    } catch (IOException e) {
        System.out.println("Call error: " + e.getLocalizedMessage());
    }
    return responseModel;
}

@Override
protected void onPostExecute(T result) {
    super.onPostExecute(result);
    //how i will pass this result where i called this task?
}

}

На самом деле я получаю ответ, но он не анализируется.

{"responseCode":404,"data":[],"error":{"errorCode":404,"errorDesc":"Не найдено!"}} <-- END HTTP (тело 81 байт)

API Response:
{
  "responseCode": 404,
  "data": [

  ],
  "error": {
    "errorCode": 404,
    "errorDesc": "Not found!"
  }
}

Какова причина?

Кстати, он анализирует ответ, когда я просто меняю код ответа на 200.

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 05.12.2022 15:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код ответа 404 означает, что приложение смогло связаться с данным сервером, но сервер не смог найти запрошенное. Могу ли я предложить вам взглянуть на параметры вашего запроса API и как бэкэнд обрабатывает эти запросы?

Отредактировано:

Вы можете проанализировать свой ответ об ошибке (если вы его отправляете), используя JSONObject

JSONObject erroObj = new JSONObject(response.errorBody().string());

// or if you have an custom error model class then do this
Gson gson = new Gson();
Type type = new TypeToken<YourErrorResponseClass>() {}.getType();
YourErrorResponseClass errorResponse = 
gson.fromJson(response.errorBody(),type);

Я надеюсь, это то, что вы искали

Я разработал этот API. Когда API не может найти данные в базе данных, он отвечает 404. Я хотел бы проанализировать ответ API. Но, насколько я понимаю, Retrofit автоматически возвращает null, когда он сталкивается с кодом ответа 404. Потому что, когда я меняю код ответа на 200, даже если API не может найти данные в базе данных.

erdogann 05.12.2022 15:19

Другие вопросы по теме