Retrofit 2.0 how to get deserialised error response.body

前端 未结 21 2280
庸人自扰
庸人自扰 2020-11-28 02:46

I\'m using Retrofit 2.0.0-beta1.

In tests i have an alternate scenario and expect error HTTP 400

I would like to have retrofit.Respons

21条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-28 03:16

    In Retrofit 2.0 beta2 this is the way that I'm getting error responses:

    1. Synchronous

      try {
         Call call = backendServiceApi.register(data.in.account, data.in.password,
                 data.in.email);
         Response response = call.execute();
         if (response != null && !response.isSuccess() && response.errorBody() != null) {
             Converter errorConverter =
                     MyApplication.getRestClient().getRetrofitInstance().responseConverter(BasicResponse.class, new Annotation[0]);
             BasicResponse error = errorConverter.convert(response.errorBody());
             //DO ERROR HANDLING HERE
             return;
         }
         RegistrationResponse registrationResponse = response.body();
         //DO SUCCESS HANDLING HERE
      } catch (IOException e) {
         //DO NETWORK ERROR HANDLING HERE
      }
      
    2. Asynchronous

      Call call = service.loadRepo();
      call.enqueue(new Callback() {
          @Override
          public void onResponse(Response response, Retrofit retrofit) {
              if (response != null && !response.isSuccess() && response.errorBody() != null) {
                  Converter errorConverter =
                      retrofit.responseConverter(BasicResponse.class, new Annotation[0]);
                  BasicResponse error = errorConverter.convert(response.errorBody());
                  //DO ERROR HANDLING HERE
                  return;
              }
              RegistrationResponse registrationResponse = response.body();
              //DO SUCCESS HANDLING HERE
          }
      
          @Override
          public void onFailure(Throwable t) {
              //DO NETWORK ERROR HANDLING HERE
          }
      });
      

    Update for Retrofit 2 beta3:

    1. Synchronous - not changed
    2. Asynchronous - Retrofit parameter was removed from onResponse

      Call call = service.loadRepo();
      call.enqueue(new Callback() {
          @Override
          public void onResponse(Response response) {
              if (response != null && !response.isSuccess() && response.errorBody() != null) {
                  Converter errorConverter =
                      MyApplication.getRestClient().getRetrofitInstance().responseConverter(BasicResponse.class, new Annotation[0]);
                  BasicResponse error = errorConverter.convert(response.errorBody());
                  //DO ERROR HANDLING HERE
                  return;
              }
              RegistrationResponse registrationResponse = response.body();
              //DO SUCCESS HANDLING HERE
          }
      
          @Override
          public void onFailure(Throwable t) {
              //DO NETWORK ERROR HANDLING HERE
          }
      });
      

提交回复
热议问题