Не получает никаких данных от Retrofit. Отправка пустого запроса на сервер

У меня проблема с вызовом Retrofit. У меня был вызов для отправки данных на сервер, вызов возвращает мне ответ 200, что означает, что вызов выполнен успешно, но он не сохраняет никаких данных в базе данных и возвращает сообщение «запрос пуст» в трассировке стека сервера. Получение данных в ответ.

Вызов интерфейса

  @Headers({"org-id: vuk"})
 @POST("/dmp/user/loginwithotp")
    Call<ResponseAPI> signInWithOTP(@Body RequestBody jsonObject);

Вызов модернизации

    OkHttpClient client = new OkHttpClient.Builder()
    .connectionSpecs(Arrays.asList(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
            .addInterceptor(loggingInterceptor)
            .addNetworkInterceptor(new CacheInterceptor(mContext))
            .connectTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl )
            .addConverterFactory(GsonConverterFactory.create(new Gson()))
 
            .client(client)
            .build();
    return retrofit;
}
public static VuAPIServices geVuAPIServices() {
    VuAPIServices vuAPIServices = getRetrofit().create(VuAPIServices.class);
    return vuAPIServices;
}

Код для отправки запроса на вызов и ответа на вызов в действии

    try {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("mobileNumber", mobileNumber);
        RequestBody body = RequestBody.create(json.toString(), MediaType.parse("application/json;charset=UTF-8"));


        Call<ResponseAPI> responseAPICall = ApiClient.geVuAPIServices().signInWithOTP(body);
        responseAPICall.enqueue(new Callback<ResponseAPI>() {
            @Override
            public void onResponse(Call<ResponseAPI> call, retrofit2.Response<ResponseAPI> response) {
                    if (!response.isSuccessful()) {
                        Log.e("TAG", "response: "+new Gson().toJson(response.body()) );
                        }
                    }

                @Override
            public void onFailure(Call<ResponseAPI> call, Throwable t) {
                    Log.e("TAG", "onFailure: "+t.toString() );
            }
        });
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

Ответ POJO

    @SerializedName("flag")
    private int flag;

    @SerializedName("message")
    private String message;
    @SerializedName("status")
    private Boolean status;
    @SerializedName("otp")
    private String otp;
    @SerializedName("locked")
    private Boolean locked;
    @SerializedName("firstTimeLogin")
    private Boolean firstTimeLogin;
    @SerializedName("firstLogin")
    private Boolean firstLogin;

Getter and Setters...

Изображение почтальона

Что я должен изменить в своем коде? Я приветствую каждый намек. Статус, который я получаю, равен 200, но с пустым запросом на стороне сервера.

Обновлено с результатом ответа

E/TAG: response: {"firstLogin":false,"firstTimeLogin":false,"flag":0,"fromInternalApp":false,"locked":false,"mobileNumber":"4455332266","noToken":false,"status":false}

Сохраняются ли данные при отправке запроса от почтальона?

rya 26.12.2020 17:24

Да, сохраняется при отправке запроса от почтальона

Disha Singh 26.12.2020 18:28

Любой, кто может помочь мне в этом?

Disha Singh 27.12.2020 07:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
683
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это может быть связано с тем, что вы отправляете объект json. Вместо этого вы можете попробовать создать объект запроса и отправить его:

public class RequestObject {

private String mobileNumber;

public RequestObject(String mobileNumber) {
    this.mobileNumber = mobileNumber;
}

public String getMobileNumber() {
    return mobileNumber;
}

public setMobileNumber(String mobileNumber) {
    this.mobileNumber = mobileNumber;
}
}

А затем отправьте его в запросе:

 @Headers({"org-id: vuk"})
 @POST("/dmp/user/loginwithotp")
 Call<ResponseAPI> signInWithOTP(@Body RequestObject requestObject); // here

Я пробовал все, чтобы заставить его работать, но он возвращает на сервер только пустой запрос, в то время как тот же вызов запроса с тем же параметром в почтальоне работает нормально и сохраняет данные в базе данных

Disha Singh 27.12.2020 14:54
Ответ принят как подходящий

Я решил свою проблему, это была проблема, из-за которой мне нужно было отправить хост в заголовке перехватчика okhttp.

httpClient.addInterceptor(new Interceptor() {
    @Override
    public Response intercept(Interceptor.Chain chain) throws IOException {
        Request original = chain.request();

        Request request = original.newBuilder()
                 .addHeader("Content-Type", "application/json")
                .addHeader("User-Agent", System.getProperty("http.agent"))
                .addHeader("Host", "localhost:8080")
                .method(original.method(), original.body())
                .build();

        return chain.proceed(request);
    }
});

Вскоре после того, как я добавил это в перехватчик, проблема была решена, и ответ был успешно возвращен.

E/TAG: response: {"firstLogin":false,"firstTimeLogin":false,"flag":1,"fromInternalApp":false,"locked":false,"message":"true OTP sent successfully on mobile number for Initial Login","noToken":false,"otp":"573287","status":false}

Спасибо @rya за ваши ценные усилия, которые вы пытались мне помочь.

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