2016-06-22 10 views
2

im пытается внедрить клиент Spring android для API Hypermedia с ответами в формате HAL. Spring HATEOAS - справочная документация описала реализацию с обходом сервиса на стороне клиента, вдохновленным библиотекой JavaScript Traverson. Я делаю это так:Android spring HATEOAS REST API поддерживает клиентов с Traverson

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 

ли кто-нибудь знает, как это исправить?

Возможно, существуют другие/лучшие способы поддержки ответов HAL в android?

+0

Нет общей библиотеки. Для каждого сервиса HATEOAS нужен клиент, написанный для него. – naXa

ответ

0

Насколько я могу судить, реализация Spring's Traverson не используется в Android, поскольку она является частью модуля Spring HATEOAS, который зависит от весеннего ядра, что в конечном счете зависит от реализации JDK StAX. Android не имеет реализации StAX, и потому, что он находится в пакете javax.*, время выполнения Android won't allow you to load one.

В статье blog post Джош Лонг описывает процесс адаптации Spring и Spring Security для работы на Android; по сути, вам приходится снимать большую часть своих зависимостей и выборочно добавлять только те, которые вам нужны. However, вы не можете работать с такими пакетами, как JAXB или STaX, чьи версии Android несовместимы или отсутствуют, поэтому вам нужно переписать код, который зависит от них, вместо этого использовать что-то другое.

A request был отправлен против проекта spring-hateoas для поддержки Android, но он был закрыт (два дня назад, когда я пишу это) с комментарием: «Мы не можем передавать ресурсы для такой специфичной для платформы функции в это время ». (С другой стороны, кто-то еще seems to be having success с описанным выше способом, так что, может быть, стоит преследовать?)

Майк Келли в своей документации по стандарту HAL снабжает list of libraries поддержкой HAL. В настоящее время я собираю решение на основе HalBuilder, которое пока выглядит многообещающим.

tl; dr: Spring's Traverson не будет работать без особых усилий с вашей стороны. Возможно, вам лучше строить свои собственные. Используйте свою любимую библиотеку HTTP вместе с библиотекой HAL, и вы больше всего там.