Запрос Retrofit2 в порядке, но все переменные внутри тела нулевые - PullRequest
0 голосов
/ 04 января 2019

Я создаю приложение с аутентификацией при входе в систему через запросы API. Я использую Retrofit 2 для выполнения запросов POST и GET. Во-первых, мне нужен JWT (токен аутентификации). Затем мне нужно проверить переменную в профиле пользователя.

У меня все работает: когда существующее письмо отправляется с соответствующим паролем (запрос POST), оно отправляет мне обратно токен пользователя (ответ POST). Затем я отправляю токен пользователя (запрос GET) и ожидаю, что в отправленном мне теле (ответ GET) будут переменные, связанные с конкретным пользователем.

Проблема в том, что в неправильном запросе ответ body: null

Но я получил тело: { имя: ноль электронная почта: ноль id: null isCostumer: null }

Я проверял использование Postman и других токенов для запроса GET.

атрибуты публичного класса {

@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("cpf")
@Expose
private String cpf;
(...)
(+ getters and setters)

}

открытый класс RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl) {
    if (retrofit==null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

}

открытый класс APIUtils {

private APIUtils() {}

public static final String BASE_URL = "http://api.adeodev.org/";

public static APIService getAPIService() {

    return RetrofitClient.getClient(BASE_URL).create(APIService.class);
}

}

открытый интерфейс APIService {

@POST("/auth/users/login")
@FormUrlEncoded
Call<UserJWT> saveUserJWT(@Field("email") String email,
                          @Field("password") String password);

@GET("/user/inhabitants/me")
Call<FullUser.Attributes> saveFullUserAttributes (@Header("Authorization") String jwtToken);

}

открытый класс LoginActivity расширяет AppCompatActivity {

private static final String RETROFIT_POST = "Retrofit POST Request";
TextView testText;
EditText emailInput;
EditText passwordInput;


// EmailPassword Login
APIService mAPIService;
Button empasLoginButton;
// End of EmailPassword Login

// Facebook Login
LoginButton facebookLoginButton;
CallbackManager callbackManager;
// End of Facebook Login

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    testText = findViewById(R.id.login_testTextView_id);
    emailInput = findViewById(R.id.login_emailinputplaintext_id);
    passwordInput = findViewById(R.id.login_passwordinputpassword_id);

    // EmailPassword Login

    mAPIService = APIUtils.getAPIService();

    empasLoginButton = findViewById(R.id.login_empasauthbutton_id);
    empasLoginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String userEmail = emailInput.getText().toString().trim();
            String userPassword = passwordInput.getText().toString().trim();
            if(!TextUtils.isEmpty(userEmail) && !TextUtils.isEmpty(userPassword)) {
                sendUserAuth(userEmail, userPassword);
            }
        }
    });

public void sendUserAuth(String email, String password) {
    mAPIService.saveUserJWT(email, password).enqueue(new Callback<UserJWT>() {
        @Override
        public void onResponse(Call<UserJWT> call, Response<UserJWT> response) {

            if(response.isSuccessful() && response.body()!=null && response.body().getJwt()!=null) {
                showResponse(response.body().toString());
                Log.i(RETROFIT_POST, "post submitted to API. JWT: " + response.body().toString());
                authCoworker(response.body().toString());
            }
        }

        @Override
        public void onFailure(Call<UserJWT> call, Throwable t) {
            Log.e(RETROFIT_POST, "Unable to submit post to API.");
        }
    });
}

public void showResponse(String response) {
    if(testText.getVisibility() == View.GONE) {
        testText.setVisibility(View.VISIBLE);
    }
    testText.setText(response);
}

public void authCoworker(String jwtToken){
    mAPIService.saveFullUserAttributes("Bearer "+jwtToken).enqueue(new Callback<FullUser.Attributes>() {
        @Override
        public void onResponse(Call<FullUser.Attributes> call, Response<FullUser.Attributes> response) {
            if(response.isSuccessful() && response.body()!=null && response.body().getCoworker()!=null) {
                if(response.body().getCoworker().equals(1)){
                    goToMain();
                } else {
                    showResponse("Apenas funcionários podem usar este aplicativo."); // Only coworkers can use this app.
                }
            }
        }
        @Override
        public void onFailure(Call<FullUser.Attributes> call, Throwable t) {
        }
    });
}

Я ожидал что-то вроде

body {

  name: UserName

  email: UserEmail

  id: UserId

  isCostumer: 0 for non-costumers, 1 for costumers

}

And with Postman, i got just that.

But in Android Studio, the result is

body {

  name: null

  email: null

  id: null

  isCostumer: null

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...