Android春季HATEOAS REST API客户端支持Traverson

时间:2016-06-22 09:29:56

标签: java android spring spring-hateoas hal

我正在尝试使用HAL格式的响应为Hypermedia 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响应吗?

1 个答案:

答案 0 :(得分:1)

我可以说,Spring的Traverson实现在Android中不可用,因为它是Spring HATEOAS模块的一部分,它依赖于spring-core,最终取决于JDK的StAX实现。 Android没有StAX实现,并且因为它位于javax.*包中,所以Android运行时won't allow you to load one

blog post中,Josh Long描述了使Spring Social和Spring Security适应Android的过程;实质上,你必须删除大多数依赖项,并有选择地只重新添加你需要的依赖项。 However,您无法解决JAXB或STaX这些Android实现不兼容或缺失的软件包,因此您必须重写依赖它们的代码来代替使用其他代码。

A request已针对支持Android的spring-hateoas项目发布,但它已关闭(两天前我写这篇文章时)评论“我们无法将资源投入到这样的平台特定功能此时”。 (另一方面,其他人seems to be having success使用上述方法,所以也许值得追求?)

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

tl;博士:Spring的Traverson如果没有你的努力就行不通。你可能最好建立自己的。使用您最喜欢的HTTP库和HAL库,您就可以使用它了。