如何使用改造和GSON解析被[]包围的JSON对象列表?
我创建了一个简单的 REST 终结点:
http://<server_address>:3000/sizes
此 URL 返回一个非常简单的响应,其中包含一个 json 数组,如下所示:
[
{ "id": 1, "name": "Small", "active": true },
{ "id": 2, "name": "Medium", "active": true },
{ "id": 3, "name": "Large", "active": true }
]
现在,我正在尝试使用带有GSON的Retrofit 2来使用此响应。
我添加了一个模型:
@lombok.AllArgsConstructor
@lombok.EqualsAndHashCode
@lombok.ToString
public class Size {
private int id;
private String name;
private boolean active;
@SerializedName("created_at")
private String createdAt;
@SerializedName("updated_at")
private String updatedAt;
}
和服务:
public interface Service {
@GET("sizes")
Call<List<Size>> loadSizes();
}
我已经实例化了改造:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://<server_address>:3000")
.addConverterFactory(GsonConverterFactory.create())
.build();
我的服务:
Service service = retrofit.create(Service.class);
现在,尝试调用数据:
service.loadSizes().enqueue(new Callback<List<Size>>() {
@Override
public void onResponse(Call<List<Size>> call, Response<List<Size>> response) {
for(Size size: response.body()) {
System.out.println(size.toString());
}
}
@Override
public void onFailure(Call<List<Size>> call, Throwable t) {
System.out.println(t.getMessage());
}
});
最终出现异常的是:
java.lang.IllegalStateException: expected BEGIN_OBJECT,但在第 1 行第 18 列路径 $[0] 处为 STRING。
我想错误是由此引起的,REST API返回一个响应,该响应是数组或对象。
- 我说的对吗?
- 使此代码正常工作的最简单方法是什么?
无法修改 REST 服务,因此响应必须保持原样。
此外,使用纯GSON对上述json的反序列化可以通过以下方式完成:
Type sizesType = new TypeToken<List<Size>>(){}.getType();
List<Size> size = new Gson().fromJson(json, sizesType);
但我不知道如何制作Retrofit 2来使用它。
提前致谢。