如何使用 Retrofit 和 Jackson 读取嵌套的 JSON 数组?
How to read nested JSON arrays with Retrofit and Jackson?
在我的 Android 应用程序中,我使用 Retrofit 来描述内部 API:
@Provides
@Singleton
ProductsService provideProductsService() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
.setConverter(new JacksonConverter(objectMapper));
return restAdapterBuilder
.setEndpoint(Endpoints.newFixedEndpoint("http://192.168.1.1"))
.build()
.create(ProductsService.class);
为了阅读 ProductLevels 我创建了以下界面:
public interface ProductsService {
@GET("/api/products/{productId}/levels/")
public Observable<List<ReadProductLevelsResponse>> readProductLevels(
@Path("productId") int productId
);
}
这是后端提供的 JSON 字符串:
[
[
1427378400000,
553
],
[
1427382000000,
553
]
]
当我尝试读取空 ReadProductLevelsResponse class 中的 JSON 数据时,出现以下错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of ReadProductLevelsResponse out of START_ARRAY token at [Source: retrofit.ExceptionCatchingTypedInput$ExceptionCatchingInputStream@11ae0f16; line: 1, column: 2] (through reference chain: java.util.ArrayList[0])
如何将 JSON 数据读入 ReadProductLevelsResponse class?
我发现 我必须使用 List<List<Double>>
作为响应类型。
public interface ProductsService {
@GET("/api/products/{productId}/levels/")
public Observable<List<List<Double>>> readProductLevels(
@Path("productId") int productId
);
}
跟进问题:
在我的 Android 应用程序中,我使用 Retrofit 来描述内部 API:
@Provides
@Singleton
ProductsService provideProductsService() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
.setConverter(new JacksonConverter(objectMapper));
return restAdapterBuilder
.setEndpoint(Endpoints.newFixedEndpoint("http://192.168.1.1"))
.build()
.create(ProductsService.class);
为了阅读 ProductLevels 我创建了以下界面:
public interface ProductsService {
@GET("/api/products/{productId}/levels/")
public Observable<List<ReadProductLevelsResponse>> readProductLevels(
@Path("productId") int productId
);
}
这是后端提供的 JSON 字符串:
[
[
1427378400000,
553
],
[
1427382000000,
553
]
]
当我尝试读取空 ReadProductLevelsResponse class 中的 JSON 数据时,出现以下错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of ReadProductLevelsResponse out of START_ARRAY token at [Source: retrofit.ExceptionCatchingTypedInput$ExceptionCatchingInputStream@11ae0f16; line: 1, column: 2] (through reference chain: java.util.ArrayList[0])
如何将 JSON 数据读入 ReadProductLevelsResponse class?
我发现 List<List<Double>>
作为响应类型。
public interface ProductsService {
@GET("/api/products/{productId}/levels/")
public Observable<List<List<Double>>> readProductLevels(
@Path("productId") int productId
);
}
跟进问题: