APP が閉じられた場合に新しい API 呼び出しに Cookie 値を設定してバックエンド セッションを維持するために、API 応答から Cookie 値を取得しようとしています。
API呼び出しに対する応答PostMan Restクライアント:
RetrofitClient.java
public static Retrofit getClient() {
if (checkClient()) {
return getRetrofit();
}
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
CookieHandler cookieHandler = new CookieManager();
okhttp3.OkHttpClient client = new okhttp3.OkHttpClient.Builder().addNetworkInterceptor(interceptor)
.cookieJar(new JavaNetCookieJar(cookieHandler))
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
return retrofit;
}
API呼び出し
private void userLogin(String username, String password) {
Retrofit retrofit = RetrofitClient.getClient();
final LoginServices loginServices = retrofit.create(LoginServices.class);
Call<LoginResponse> call = loginServices.userLogin(username, password);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
Log.d("Response code:", "===========" + response.code());
Log.d("==Cookie==1===", "==="+response.raw().request().headers().get("Cookie"));
Log.d("==Cookie==2==", "==="+response.headers().get("Cookie"));
Log.d("==Content-Type====", "==="+response.headers().get("Content-Type"));
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Log.e("TAG", "=======onFailure: " + t.toString());
t.printStackTrace();
// Log error here since request failed
}
});
}
ログキャット:
Response code:: ===========200
==Cookie==1===: ===null
==Cookie==1===: ===null
==Content-Type====: ===application/json
他のさまざまな方法も試しましたが、どれもうまくいきませんでした。助けてください!
ベストアンサー1
List<String> Cookielist = response.headers().values("Set-Cookie");
String jsessionid = (Cookielist .get(0).split(";"))[0];
これは私にとってはうまくいきました。完璧な解決策ではありませんが、うまくいきました