改造预期 BEGIN_OBJECT 但在第 1 行第 2 列路径 BEGIN_ARRAY
Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
我正在尝试 Retrofit 以获得此响应
POST : https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com/prod/pacakageinfo
BODY : {"type":"carwash"}
回应
[
{
"title": "SEDAN/NON SEDAN Exterior",
"choice": "Exterior Only",
"price": ".95/34.95 +",
"description": [
"Full body waterless car wash",
"Windows & Mirrors cleaning",
],
"addons": [
{
"price": "29.95",
"title": "Sedan 29.95$ USD"
},
{
"price": "34.95",
"title": "Non-Sedan SUV 34.95$ USD"
}
]
},
{
"title": "SEDAN/NON SEDAN",
"choice": "Exterior & Interior",
"price": ".95/44.95 +",
"description": [
"Full body waterless car wash",
"Leather cleaning & Care"
],
"addons": [
{
"price": "34.95",
"title": "Sedan 34.95$ USD"
},
{
"price": "44.95",
"title": "Non-Sedan/SUV 44.95$ USD"
}
]
}
]
PackagesAPI Class
public interface PackagesAPI {
@POST("/prod/pacakageinfo")
Call<List<PackagesAdapter.Item>> loadPackages(@Body PackagesFragment.PackageType packageType);
}
GetPackagecall(在包片段中)
private void getPackagesCall(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
PackagesAPI packagesAPI = retrofit.create(PackagesAPI.class);
Call<List<PackagesAdapter.Item>> call = packagesAPI.loadPackages(new PackageType("carwash"));
call.enqueue(this);
}
public class PackageType {
final String type;
PackageType(String type) {
this.type = type;
}
}
Public 对象 在 class PackageAdapter
public class Item {
String title;
String choice;
String price;
public List<String> description = new ArrayList<String>();
public List<Addon> addons = new ArrayList<Addon>();
}
public class Addon {
String price;
String title;
}
但是它给出了 "Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path" 异常?
我看到了类似的其他帖子,通常对象定义存在问题?
我无法弄清楚这里出了什么问题,我试过了 jsonschema2pojo。
您应该尝试将 Item
和 Addon
class 设为 static
或将它们移动到它们自己的 class 定义中(出于 PackageAdapter
).因此,在此解决方案中,我假设您将这些 classes 移动到它们单独的 class files/definitions 如果没有令人信服的理由将它们作为内部 classes。
在Item.java:
public class Item {
String title;
String choice;
String price;
public List<String> description = new ArrayList<String>();
public List<Addon> addons = new ArrayList<Addon>();
}
在Addon.java
public class Addon {
String price;
String title;
}
不要将成员变量设为 public
,请尝试将这些内部 class 设为 static
,或者将它们移至单独的 class文件(推荐)。测试一下,让我们知道它是否解决了问题。
我正在尝试 Retrofit 以获得此响应
POST : https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com/prod/pacakageinfo
BODY : {"type":"carwash"}
回应
[
{
"title": "SEDAN/NON SEDAN Exterior",
"choice": "Exterior Only",
"price": ".95/34.95 +",
"description": [
"Full body waterless car wash",
"Windows & Mirrors cleaning",
],
"addons": [
{
"price": "29.95",
"title": "Sedan 29.95$ USD"
},
{
"price": "34.95",
"title": "Non-Sedan SUV 34.95$ USD"
}
]
},
{
"title": "SEDAN/NON SEDAN",
"choice": "Exterior & Interior",
"price": ".95/44.95 +",
"description": [
"Full body waterless car wash",
"Leather cleaning & Care"
],
"addons": [
{
"price": "34.95",
"title": "Sedan 34.95$ USD"
},
{
"price": "44.95",
"title": "Non-Sedan/SUV 44.95$ USD"
}
]
}
]
PackagesAPI Class
public interface PackagesAPI {
@POST("/prod/pacakageinfo")
Call<List<PackagesAdapter.Item>> loadPackages(@Body PackagesFragment.PackageType packageType);
}
GetPackagecall(在包片段中)
private void getPackagesCall(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://wrlyxhnjw3.execute-api.us-east-1.amazonaws.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
PackagesAPI packagesAPI = retrofit.create(PackagesAPI.class);
Call<List<PackagesAdapter.Item>> call = packagesAPI.loadPackages(new PackageType("carwash"));
call.enqueue(this);
}
public class PackageType {
final String type;
PackageType(String type) {
this.type = type;
}
}
Public 对象 在 class PackageAdapter
public class Item {
String title;
String choice;
String price;
public List<String> description = new ArrayList<String>();
public List<Addon> addons = new ArrayList<Addon>();
}
public class Addon {
String price;
String title;
}
但是它给出了 "Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path" 异常?
我看到了类似的其他帖子,通常对象定义存在问题?
我无法弄清楚这里出了什么问题,我试过了 jsonschema2pojo。
您应该尝试将 Item
和 Addon
class 设为 static
或将它们移动到它们自己的 class 定义中(出于 PackageAdapter
).因此,在此解决方案中,我假设您将这些 classes 移动到它们单独的 class files/definitions 如果没有令人信服的理由将它们作为内部 classes。
在Item.java:
public class Item {
String title;
String choice;
String price;
public List<String> description = new ArrayList<String>();
public List<Addon> addons = new ArrayList<Addon>();
}
在Addon.java
public class Addon {
String price;
String title;
}
不要将成员变量设为 public
,请尝试将这些内部 class 设为 static
,或者将它们移至单独的 class文件(推荐)。测试一下,让我们知道它是否解决了问题。