Не получаю поле из rest с помощью Retrofit 2
Следующая ситуация, я отправляю логин и пароль, в ответ получаю JWT-токен. Я логах я его получаю, но он не записывается в body.
data class LoginResponse (
@SerializedName("jwtToken")
var jwtToken: String? = null
)
Интерфейс
interface ApiService {
@POST(LOGIN_URL)
fun login(@Body request: LoginRequest): Call<LoginResponse>
}
Сам класс
class ApiClient {
private lateinit var apiService: ApiService
fun getApiService(context: Context): ApiService {
// Initialize ApiService if not initialized yet
if (!::apiService.isInitialized) {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient(context))
.build()
apiService = retrofit.create(ApiService::class.java)
}
return apiService
}
/**
* Initialize OkHttpClient with our interceptor
*/
private fun okHttpClient(context: Context): OkHttpClient {
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.addInterceptor(interceptor)
.addInterceptor(AuthInterceptor(context))
.connectTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.build()
}
}
Код вызова.
register_btn_next.setOnClickListener {
apiClient = ApiClient()
sessionManager = SessionManager(context!!)
apiClient.getApiService(context!!)
.login(LoginRequest(username = "dan_collector", password = "password"))
.enqueue(object : Callback<LoginResponse> {
override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
// Error logging in
t.localizedMessage
}
override fun onResponse(
call: Call<LoginResponse>,
response: Response<LoginResponse>
) {
if (response.isSuccessful) {
val loginResponse = response.body()
if (loginResponse != null && loginResponse.equals("")) {
showToast("Наканецта!!")
sessionManager.saveJwtToken(loginResponse.jwtToken!!)
}
/*if (loginResponse?.statusCode == 200 && loginResponse.collector != null) {
sessionManager.saveJwtToken(loginResponse.JwtToken)
} else {
// Error logging in
Log.i("kek","ERRRROR 4444")
}*/
} else {
//TODO
}
}
})
sendCode()
}
}
В общем я логах я вижу, что пришло, но при попытке получить val loginResponse = response.body() получаю null. Сижу с проблемой уже добрых 6 часов. Очень прошу помощи.
Ниже прикреплю лог
D/OkHttp: --> POST http://localhost:8080/auth D/OkHttp: Content-Type: application/json; charset=UTF-8
Content-Length: 50
{"password":"password","username":"dan_collector"}
--> END POST (50-byte body) D/OkHttp: <-- 200 http://localhost:8080/auth (65ms)
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json
Transfer-Encoding: chunked
Date: Wed, 28 Oct 2020 23:32:06 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{"jwtToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYW5fY29sbGVjdG9yIiwiZXhwIjoxNjA0MDQ3OTI3LCJpYXQiOjE2MDM5Mjc5MjcsImF1dGhvcml0aWVzIjoiUk9MRV9DT0xMRUNUT1IifQ.qoEINSR-NppKv6eg7vIsaHFUCksTx3Wwx_vZc8YUipI"}
<-- END HTTP (198-byte body)
Ответы (1 шт):
Автор решения: WBLord
→ Ссылка
Моя проблема была в том, что я не правильно получал json. Нужно было подправить класс получающий json.