0

Недавно во время работы с клиентом feign в приложении весенней загрузки (которое в моем случае не является веб-приложением), я вижу, что клиент не в состоянии де-сериализовать объект правильно. Как указал мне коллега - он оказался из-за регистрации модуля HAL -условен охраняемых @ConditionalOnWebApplication на spring auto configuration of hateosFeign Client (в среде без Интернета) для RepostoryRestResource с HAL - недопустимый вариант использования?

На зная это есть решение, которые могут быть помещены в месте, которое было бы преодолеть этот

  1. Мы можем добавить декодер к симулировать клиент, который содержит ObjectMapper, который имеет зарегистрированный модуль HAL (небольшой фрагмент кода, но еще дополнительную работу)
  2. Преобразовать в вебе-приложение - что я чувствую себя не хорошее решение вообще и не должно быть сделано в сути, чтобы заставить вещи работать из коробки.

Так что теперь, зная это, кто-нибудь столкнулся с этим? Я чувствую, что притворный клиент для ресурса отдыха Jpa - это допустимый сценарий.

Ниже приведен пример ответа сервера, который является страничным. Обратите внимание на содержание мета-данных в ниже получен ответ (имеет один результат), но с из затруднительного, когда я пытаюсь прочитать содержимое выгружаемого ресурса было бы оказывается утратившими/пустой

 { 
     "_embedded": { 
      "emails": [{ 
       "id": "1a5edced-c165-4209-9d1c-9549b6841d13", 
       "tenantId": "a56982a6-6e12-4fe6-95d1-b735cedda2dc", 
       "email": "[email protected]", 
       "_links": { 
        "self": { 
         "href": "http://10.190.224.138:8086/emails/1a5edced-c165-4209-9d1c- 9549b6841d13" 
        }, 
        "email": { 
         "href": "http://10.190.224.138:8086/emails/1a5edced-c165-4209-9d1c-9549b6841d13" 
        } 
       } 
      }] 
     }, 
     "_links": { 
      "self": { 
       "href": "http://10.190.224.138:8086/emails/search/whatssss?email=whatever%40whatever.com" 
      } 
     }, 
     "page": { 
      "size": 20, 
      "totalElements": 1, 
      "totalPages": 1, 
      "number": 0 
     } 
    } 

ответ

0

Первый один ответ, предложенный вами, имеет смысл для меня, просто добавьте необходимые зависимости внутри вашего проекта и повторите попытку, он должен работать. С другой стороны, вторая кажется действительно плохой идеей, вы никогда не должны думать об изменении своего приложения полностью только для поддержки любой библиотеки.

+0

спасибо за ответ, первое решение действительно работает. Но хотелось бы знать, не означает ли клиент, что он работает для ответа hal + json, независимо от того, вызваны ли из веб-среды/не-веб-среды какие-либо мысли по этому поводу? – naav

+0

С моей точки зрения, я согласен с вами, Feign предназначен для создания клиентов-клиентов без ограничений, связанных с веб-приложениями или не-веб-приложениями. –

2

Spring Boot autoconfigures поддерживает гипермедиа под предпосылкой, в которой вы пытаетесь служить гипермедиа, а не просто потреблять ее.

Если вы видите необходимость автоконфигурации различных клиентов, я бы предложил открыть проблему с Spring Boot с подробными сведениями о том, как и почему так, чтобы команда загрузки могла нормально реагировать.

В свете всего, что, потребляя гипермедиа так же легко, как:

Traverson client = new Traverson(/* baseUri */, MediaTypes.HAL_JSON); // set up for HAL 

... или ...

@Configuration 
@EnableHypermediaSupport({HypermediaType.HAL}) 
class ConfigureHypermediaInMyClient { 
    @Bean 
    RestOperations restOperations() { 
     return new RestTemplate(); 
    } 
} 

Первый сценарий будет создать экземпляр Traverson, используется для хоп rel-to-rel и потребительский HAL. Этот последний зарегистрирует экземпляр RestTemplate в контексте приложения, а затем украсит этот экземпляр поддержкой HAL.

ВАЖНО: В любое время, когда вы используете @EnableHypermediaSupport, Spring Boot будет отбрасывать свои собственные данные автоконфигурации для вашего уважения. Построение клиента только? Хорошо, потому что автоконфигурация сосредоточена на стороне сервера. Создание собственного сервера? Затем будьте готовы к полной конфигурации.

Как насчет Feign? Ни Spring Boot, ни Spring HATEOAS не имеют прямой поддержки Feign в этот момент времени. Чтобы Fign потреблял HAL и т. Д., Пользовательская настройка. Учитывая, что Feign нацелен на создание вызовов RPC и имеет URI-ориентированный характер, перескакивание ссылок может не наилучшим образом использоваться. Посмотрите на материал Traverson и посмотрите, больше ли это того, что вы ищете.

P.S. В свете https://spring.io/blog/2018/01/12/building-richer-hypermedia-with-spring-hateoas вы также можете выбрать поддержку HAL-FORMS.

+0

Спасибо, что узнали о traverson .. не знали об этом. – naav

+0

Это говорит, что я согласен, что это разрешит проблемы, если у нас есть прямой URI, который может быть прокси-сервером zuul в пограничной системе. В небольшом внутреннем приложении, которое я пытался построить раньше, я пытался использовать сервис, зарегистрированный в eureka, и, следовательно, использование Feign/ribbon. – naav

 Смежные вопросы

  • Нет связанных вопросов^_^