Зачем вызывать код 400 при ответе, когда почтальон делает все правильно? - PullRequest
1 голос
/ 16 мая 2019

Я хочу предоставить чистый код в соответствии с архитектурой руководящих принципов и правилами CleanCode.

Я пытался использовать библиотеку gson для сериализации данных, используемых в вызове дооснащения.

Я знаю, что могуиспользуйте @SerializedName в моем классе моделей, но я хочу узнать, как использовать gson builder.

В MainActivity у меня есть:

btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CredentialModel credentials = new CredentialModel("User", "Password");
                Gson gson = new GsonBuilder().serializeNulls().create();
                String json = gson.toJson(credentials);
                UserApiClient userApiClient = RetrofitInstace.getRetrofitInstance().create(UserApiClient.class);
                Call<String> call = userApiClient.login(json);
                call.enqueue(new Callback<String>() {
                    @Override
                    public void onResponse(Call<String> call, Response<String> response) {
                        toastNotify(String.valueOf(response.code()));

                    }

                    @Override
                    public void onFailure(Call<String> call, Throwable t) {
                        toastNotify("Fail");
                    }
                });
            }
        });

Интерфейс UserApiClient:

@POST("/api/AppUser/login")
    Call<String> login(@Body String credentials);

Класс RetrofitInstance:

public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {
            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(new OkHttpClient())
                    .build();
        }
        return retrofit;
    }

Я получаю 400 код ошибки, когда почтальон с копированием данных из переменной json в режиме отладки в тело дает мне код 200. Это не мой сервер, поэтому я не могу сказать, что сделанона стороне сервера.Также я новичок в Android и еще не знаю, как проверить необработанный запрос в Android Studio.

1 Ответ

0 голосов
/ 16 мая 2019

Вы используете GsonConverterFactory.create(), но вы передаете String в Call<String> login(@Body String credentials);.Вы не можете этого сделать.

Вам необходимо передать POJO, который сериализован gson.В противном случае модификация передаст нулевой объект как тело.

class MyBody {
    // serialize it here
}

// You also cannot use a String at Call<String>
// for now use ResponseBody. Create a POJO class later though
Call<ResponseBody> login(@Body MyBody credentials);

То, что вы хотите сделать, уже выполняется внутри модернизации.

// retrofit does this for you underneat when you use GsonConverterFactory.create()
Gson gson = new GsonBuilder().serializeNulls().create();
String json = gson.toJson(credentials);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...