如何使用 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
    );

}

跟进问题: