2

我正在尝试为带有 HAL 格式响应的超媒体 API 实现 spring android 客户端。Spring HATEOAS - 参考文档描述了受 Traverson JavaScript 库启发的客户端服务遍历的实现。我这样做:

    Traverson traverson = null;
    try {
        traverson = new Traverson(new URI(getString(R.string.api_test_uri)), MediaTypes.HAL_JSON);
    } catch (URISyntaxException e) {    
        e.printStackTrace();
    }
    String name = traverson.follow("movies", "movie", "actor").
            withTemplateParameters(parameters).
            toObject("$.name");

但是我在创建一个新的 Traverson 对象时遇到了以下错误:

java.lang.NoClassDefFoundError: org.springframework.hateoas.hal.HalLinkDiscoverer

有人知道如何解决吗?

是否有其他/更好的方法来支持 android 中的 HAL 响应?

4

1 回答 1

1

据我所知,Spring 的 Traverson 实现在 Android 中不可用,因为它是 Spring HATEOAS 模块的一部分,它依赖于 spring-core,它最终依赖于 JDK 的StAX实现。Android 没有 StAX 实现,因为它在一个javax.*包中,所以 Android 运行时不允许您加载一个.

在一篇文中,Josh Long 描述了将 Spring Social 和 Spring Security 应用到 Android 上的过程;本质上,您必须去除它们的大部分依赖项,并有选择地只重新添加您需要的那些。但是,您无法解决 JAXB 或 STaX 等 Android 实现不兼容或缺失的包,因此您必须重写依赖于它们的代码以使用其他东西。

已针对 spring-hateoas 项目发布了支持 Android的请求,但该请求已关闭(在我写这篇文章的两天前),并附有评论“我们目前无法将资源提交给这样一个特定于平台的功能”。(另一方面,其他人似乎用上述方法取得了成功,所以也许值得追求?)

Mike Kelly 在他关于 HAL 标准的文档中提供了支持 HAL的库列表。我目前正在整合一个基于HalBuilder的解决方案,到目前为止看起来很有希望。

tl; 博士:如果没有您的大量努力,Spring 的 Traverson 将无法工作。你可能会更好地建立自己的。将您最喜欢的 HTTP 库与 HAL 库一起使用,您就大功告成了。

于 2017-06-16T16:07:39.783 回答