我正在尝试在rails 5中构建一个仅支持api的应用。我使用的是活动模型序列化器(AMS)。
在我的 Call<VKSongApi> call = apiService.search("test","fff9ef502df4bb10d9bf50dcd62170a24c69e98e4d847d9798d63dacf474b674f9a512b2b3f7e8ebf1d69");
call.enqueue(new Callback<VKSongApi>() {
@Override
public void onResponse(Call<VKSongApi> call, Response<VKSongApi> response) {
int statusCode = response.code();
VKSongApi song = response.body();
Log.d(TAG,response.message());
}
@Override
public void onFailure(Call<VKSongApi> call, Throwable t) {
//Here the error occurs com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 20 path $.response[0]
Log.d(TAG,"Failure");
}
});
(UsersController#index)端点上,我希望根json有一个&#34;用户&#34; json用户数组之前的关键字。
如果我设置了一个GET /users
值的初始值设定项,那么我就有了所需的行为。
但是,在ActiveModelSerializers.config.adapter = :json
上,简单用户json位于密钥GET /users/1
下。我想摆脱这个键(在这种情况下)并简单地回答用户json作为根json。
问题是:如何在特定端点/响应/方法上定义AMS适配器?这可能吗?
答案 0 :(得分:2)
我应该阅读手册:$
覆盖&#34; root&#34;键,您必须在调用root:
方法时提供render
参数。如果您在初始化程序中使用:json
适配器,它将是这样的:
render json: @user, root: "admin"
然后这将生成一个像这样的json:
{ &#34; admin&#34;:{ &#34; id&#34;:123, &#34;电子邮件&#34;:&#34; email@example.com" } }
如果需要,您还可以在root:
之后提供另一个密钥来设置适配器,如下所示:adapter: :json
因此,:attributes
适配器没有根密钥。要删除根密钥,您可以执行以下操作:
render json: @user, root: "admin", adapter: :attributes