GSON错误:需要开始_OBJECT,但在第1行第1列路径$处为STRING,为什么会出现此错误?

ajsxfq5m  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(209)

我使用retrofint创建了基于令牌的登录函数,但我收到此错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

我已经在我的界面中添加了Accept标头:

interface MyApi
{
  @Headers("Accept:application/json")
  @POST(Constants.LOGIN_URL)
  fun login(@Body request : LoginRequest) : Call<LoginResponse>
}

我还在我的GSON构建器中将宽松设置为true:

class ApiClient
{
  private lateinit var apiService : MyApi

  private val gson = GsonBuilder()
    .setLenient()
    .create()

  fun getApiService(context : Context): MyApi {
    if (!::apiService.isInitialized) {
        val retrofit = Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(okhttpClient(context))
            .build()

        apiService = retrofit.create(MyApi::class.java)
    }
    return apiService
}

   private fun okhttpClient(context : Context) : OkHttpClient {
    return OkHttpClient.Builder()
        .addInterceptor(AuthInterceptor(context))
        .build()
   }

}

我的数据类如下所示:

data class LoginRequest(
    @SerializedName("email") var email : String ,
    @SerializedName("password") var password : String ,
    @SerializedName("device_name") var device_name : String = "android")

data class LoginResponse(
    @SerializedName("status_code") var status_code : Int ,
    @SerializedName("auth_Token") var authToken : String ,
    @SerializedName("user") var user : User)

data class User(
    @SerializedName("id") var id : String ,
    @SerializedName("username") var username : String ,
    @SerializedName("first_name") var firstName : String ,
    @SerializedName("last_name") var lastName : String ,
    @SerializedName("email") var email : String)

"有人能帮我解决这个问题吗"
我试着在 Postman 中这样做,得到的回应是:

如果凭据不正确:

{
"message": "The provided credentials are incorrect.",
"errors": {
    "email": [
        "The provided credentials are incorrect."
    ]
}
}

如果正确:

118|uv9iD1wJHpchg49kmOM1ZvNkg5PPuMeZ4QNl5N0r
2hh7jdfx

2hh7jdfx1#

响应未正确格式化为JSON格式。请调试服务器的响应并对其进行验证
json对象的开头类似于{“data”:“value”},但您收到的响应不像有效的JSON,而是简单的字符串...

44u64gxh

44u64gxh2#

问题是,您尝试使用LoginResponse数据类调用JSON对象,但响应只是一个字符串,而不是JSON。

fun login(@Body request : LoginRequest) : Call<String>

相关问题