JSON 错误“java.lang.IllegalStateException:应为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $ 处为 STRING”

新手上路,请多包涵
public interface UserService {
    @POST(Constants.Api.URL_REGISTRATION)
    @FormUrlEncoded
    BaseWrapper registerUser(@Field("first_name") String firstname, @Field("last_name") String lastname, @Field("regNumber") String phone, @Field("regRole") int role);

 public BaseWrapper registerUser(User user) {
        return getUserService().registerUser(user.getFirstName(), user.getLastName(), user.getPhone(), user.getRole());
    }

这创建异常

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

非常感谢您的帮助。

原文由 androidAnonDev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 732
2 个回答

让我们看看您收到的错误。

预期 BEGIN_OBJECT

您的 JSON 是一个对象,所有 JSON 对象都包含在大括号 ({}) 中。因此 BEGIN_OBJECT 是 {.它在某处期待它。

但是是STRING

但是他却发现了一个字符串“Something”。仍然没有告诉我们在哪里。

在第 1 行第 1 列路径 $

啊,完美。在第 1 行第 1 列。这是 JSON 的开头。所以您忘记了将整个内容包含在 {} 中(或者至少您忘记了第一个,但我敢打赌您已经忘记了它们)。

原文由 Astrogat 发布,翻译遵循 CC BY-SA 3.0 许可协议

最近我遇到了类似的问题,只能通过在标题部分添加 “接受:应用程序/json” 来解决。所以,如果你使用的是改造 2.0;

第一种解决方案: 对于 post 方法,添加 headers 参数,如下所示;

 @Headers({"Accept: application/json"})
@POST(Constants.Api.URL_REGISTRATION)
@FormUrlEncoded
BaseWrapper registerUser(@Field("first_name") String firstname,
                         @Field("last_name") String lastname,
                         @Field("regNumber") String phone,
                         @Field("regRole") int role);

第二种解决方案: 像这样将标头添加到您的拦截器类中;

注意:代码在 kotlin 中

private fun getInterceptor(): Interceptor {
        try {
            return Interceptor {
                val request = it.request()
                it.proceed(
                    request.newBuilder()
                        .header("Accept", "application/json")
                        .header("Authorization", "$accessTokenType $accessToken")
                        .build()
                )
            }
        } catch (exception: Exception) {
            throw Exception(exception.message)
        }
    }
}

希望对您有所帮助,编码愉快 :)

原文由 Rezwan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题