Android дооснащен телом ответа, jwt в ответе, как его получить? - PullRequest
0 голосов
/ 09 сентября 2018

Я использую Android в качестве внешнего приложения и загрузку Spring в качестве серверной части. Я использую Android Retrofit библиотеки для подключения к серверу. Когда пользователь входит на сервер, он получает ответ, подобный этому.

response from server after successful sign in

Так как мне извлечь "accessToken" и "tokenType" из ответа тела?

Вот мой метод входа в Android:

private void login(LoginRequest loginRequest) {

    OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder();

    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    okHttpClientBuilder.addInterceptor(logging);

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClientBuilder.build());

    Retrofit retrofit = builder.build();

    RestAPI client = retrofit.create(RestAPI.class);

    Call<LoginRequest> call = client.signIn(loginRequest);

    call.enqueue(new Callback<LoginRequest>() {
        @Override
        public void onResponse(Call<LoginRequest> call, Response<LoginRequest> response) {
            if (response.code() == 200) {
                Toast.makeText(getApplicationContext(), response.body().toString(),
                        Toast.LENGTH_LONG).show();
                Intent i = new Intent(LoginActivity.this, PostsActivity.class);
                //response.body should be somewhere here

                startActivity(i);
            }else{
                Toast.makeText(getApplicationContext(), "Uneti podaci nisu dobri",
                        Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onFailure(Call<LoginRequest> call, Throwable t) {


        }
    });


}

Это мой класс LoginRequest

public class LoginRequest {

private String username;
private String password;


public LoginRequest(String username, String password) {
    this.username = username;
    this.password = password;
}

}  

1 Ответ

0 голосов
/ 09 сентября 2018

Создайте класс модели для ответа, как показано ниже

public class Token {
    @SerializedName("tokenType")
    private String tokenType;

    @SerializedName("accessToken")
    private String accessToken;

    public String getTokenType() {
        return tokenType;
    }

    public void setTokenType(String tokenType) {
        this.tokenType = tokenType;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
}

Затем измените тип возврата Api на Call<Token>

Соответственно вам также нужно изменить вызов

call.enqueue(new Callback<Token>() {
    @Override
    public void onResponse(Call<Token> call, Response<Token> response) {
       if(response.isSuccessful()) {
          Token token = response.body();
       }
    }

    @Override
    public void onFailure(Call<Token> call, Throwable t) {
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...