| <!DOCTYPE html> |
| |
| |
| |
| |
| <html class="no-js"> |
| |
| <head lang="en-us"> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1"> |
| <meta http-equiv="X-UA-Compatible" content="IE=10" /> |
| <title>Feign Client - Eclipse hawkBit</title> |
| <meta name="generator" content="Hugo 0.77.0" /> |
| |
| |
| <meta name="description" content="IoT. Update. Device."> |
| |
| <link rel="canonical" href="https://www.eclipse.org/hawkbit/guides/feignclient/"> |
| |
| <meta name="author" content="The Eclipse hawkBit Project"> |
| |
| |
| <meta property="og:url" content="https://www.eclipse.org/hawkbit/guides/feignclient/"> |
| <meta property="og:title" content="Eclipse hawkBit"> |
| <meta property="og:image" content="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png"> |
| <meta name="apple-mobile-web-app-title" content="Eclipse hawkBit"> |
| <meta name="apple-mobile-web-app-capable" content="yes"> |
| <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> |
| |
| |
| |
| <link rel="shortcut icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico"> |
| <link rel="icon" type="image/x-icon" href="https://www.eclipse.org/hawkbit/images/favicon.ico"> |
| |
| <style> |
| @font-face { |
| font-family: 'Icon'; |
| src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot'); |
| src: url('https://www.eclipse.org/hawkbit/fonts/icon.eot') |
| format('embedded-opentype'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.woff') |
| format('woff'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.ttf') |
| format('truetype'), |
| url('https://www.eclipse.org/hawkbit/fonts/icon.svg') |
| format('svg'); |
| font-weight: normal; |
| font-style: normal; |
| } |
| </style> |
| |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/application.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/temporary.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/palettes.css"> |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/stylesheets/highlight/highlight.css"> |
| |
| |
| |
| |
| <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Ubuntu:400,700|Ubuntu+Mono"> |
| <style> |
| body, input { |
| font-family: 'Ubuntu', Helvetica, Arial, sans-serif; |
| } |
| pre, code { |
| font-family: 'Ubuntu Mono', 'Courier New', 'Courier', monospace; |
| } |
| </style> |
| |
| |
| <link rel="stylesheet" href="https://www.eclipse.org/hawkbit/css/hawkbit.css"> |
| |
| <link rel="stylesheet" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css"> |
| |
| <script src="https://www.eclipse.org/hawkbit/javascripts/modernizr.js"></script> |
| <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> |
| |
| |
| |
| <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous"> |
| </head> |
| <body class="palette-primary-deep-purple palette-accent-light-green"> |
| |
| |
| |
| |
| |
| |
| |
| <div class="backdrop"> |
| <div class="backdrop-paper"></div> |
| </div> |
| |
| <input class="toggle" type="checkbox" id="toggle-drawer"> |
| <input class="toggle" type="checkbox" id="toggle-search"> |
| <label class="toggle-button overlay" for="toggle-drawer"></label> |
| |
| <header class="header"> |
| <nav aria-label="Header"> |
| <div class="bar default"> |
| <div class="button button-menu" role="button" aria-label="Menu"> |
| <label class="toggle-button icon icon-menu" for="toggle-drawer"> |
| <span></span> |
| </label> |
| </div> |
| <div class="stretch"> |
| <div class="title"> |
| Feign Client |
| </div> |
| </div> |
| |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="GitHub"> |
| <a href="https://github.com/eclipse/hawkbit" title="@eclipse/hawkbit on GitHub" target="_blank" class="toggle-button icon icon-github"></a> |
| </div> |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="Gitter"> |
| <a href="https://gitter.im/eclipse/hawkbit" title="@eclipse/hawkbit on Gitter" target="_blank" class="toggle-button icon fab fa-gitter"></a> |
| </div> |
| |
| |
| |
| <div class="button button-github" role="button" aria-label="Docker"> |
| <a href="https://hub.docker.com/u/hawkbit" title="hawkbit on Docker Hub" target="_blank" class="toggle-button icon fab fa-docker"></a> |
| </div> |
| |
| |
| |
| </div> |
| <div class="bar search"> |
| <div class="button button-close" role="button" aria-label="Close"> |
| <label class="toggle-button icon icon-back" for="toggle-search"></label> |
| </div> |
| <div class="stretch"> |
| <div class="field"> |
| <input class="query" type="text" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck> |
| </div> |
| </div> |
| <div class="button button-reset" role="button" aria-label="Search"> |
| <button class="toggle-button icon icon-close" id="reset-search"></button> |
| </div> |
| </div> |
| </nav> |
| </header> |
| |
| <main class="main"> |
| <div class="drawer"> |
| <nav aria-label="Navigation"> |
| <a href="https://www.eclipse.org/hawkbit/" class="project"> |
| <div class="banner"> |
| |
| <div class="logo"> |
| <img src="https://www.eclipse.org/hawkbit/images/hawkbit_icon.png"> |
| </div> |
| |
| <div class="name"> |
| <strong>Eclipse hawkBit™ </strong> |
| |
| <br> |
| eclipse/hawkbit |
| |
| </div> |
| </div> |
| </a> |
| |
| <div class="scrollable"> |
| <div class="wrapper"> |
| |
| <ul class="repo"> |
| <li class="repo-download"> |
| <a href="https://hawkbit.eclipse.org" target="_blank" title="hawkBit Sandbox" data-action="sandbox"> |
| <i class="fas fa-desktop"></i> Sandbox |
| </a> |
| </li> |
| <li class="repo-stars"> |
| <a href="https://github.com/eclipse/hawkbit/stargazers" target="_blank" title="Stargazers" data-action="star"> |
| <i class="icon icon-star"></i> Stars |
| <span class="count">–</span> |
| </a> |
| </li> |
| </ul> |
| <hr> |
| |
| |
| <div class="toc"> |
| |
| <ul> |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="What is hawkBit" href="/hawkbit/whatishawkbit/"> |
| |
| What is hawkBit |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Getting started" href="/hawkbit/gettingstarted/"> |
| |
| Getting started |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Guides" href="/hawkbit/guides/"> |
| |
| Guides |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Features" href="/hawkbit/features/"> |
| |
| Features |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Concepts" href="/hawkbit/concepts/"> |
| |
| Concepts |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Architecture" href="/hawkbit/architecture/"> |
| |
| Architecture |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Management UI" href="/hawkbit/ui/"> |
| |
| Management UI |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="APIs" href="/hawkbit/apis/"> |
| |
| APIs |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Community" href="/hawkbit/community/"> |
| |
| Community |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| |
| <li> |
| |
| |
| |
| |
| |
| <a title="Release notes" href="/hawkbit/release-notes/"> |
| |
| Release notes |
| </a> |
| |
| |
| |
| </li> |
| |
| |
| </ul> |
| |
| |
| |
| <hr> |
| |
| <ul> |
| <li> |
| <a href="https://gitter.im/eclipse/hawkbit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge" title="Chat on Gitter" target="_blank"> |
| <img src="https://badges.gitter.im/eclipse/hawkbit.svg" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://circleci.com/gh/eclipse/hawkbit" title="Circle CI Status" target="_blank"> |
| <img src="https://circleci.com/gh/eclipse/hawkbit.svg?style=shield" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://sonar.ops.bosch-iot-rollouts.com" title="SonarQube Status" target="_blank"> |
| <img src="https://sonar.ops.bosch-iot-rollouts.com/api/badges/gate?key=org.eclipse.hawkbit:hawkbit-parent" /> |
| </a> |
| </li> |
| <li> |
| <a href="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent" title="Maven Central Status" target="_blank"> |
| <img src="https://maven-badges.herokuapp.com/maven-central/org.eclipse.hawkbit/hawkbit-parent/badge.svg" /> |
| </a> |
| </li> |
| </ul> |
| |
| </div> |
| </div> |
| </div> |
| </nav> |
| |
| </div> |
| |
| <article class="article"> |
| <div class="wrapper"> |
| <h1>Feign Client </h1> |
| |
| <p>In this guide we describe how to create a <a href="https://github.com/Netflix/feign">Feign</a> Rest Client based on a <a href="http://projects.spring.io/spring-boot/">Spring Boot</a> Application.</p> |
| |
| <h2 id="create-feign-rest-client">Create Feign REST Client</h2> |
| |
| <p>hawkBit provides REST interfaces for <a href="https://github.com/eclipse/hawkbit/tree/master/hawkbit-ddi-api">Management API</a> and <a href="https://github.com/eclipse/hawkbit/tree/master/hawkbit-ddi-api">DDI API</a>. Using this interfaces you can create a feign client with the help of the <a href="http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign-inheritance">feign inheritance support</a>. |
| Our <a href="https://github.com/eclipse/hawkbit-examples">example</a> modules demonstrate how to create <a href="https://github.com/Netflix/feign">Feign</a> client resources. Here you can find the <a href="hhttps://github.com/eclipse/hawkbit-examples/tree/master/hawkbit-example-mgmt-feign-client">Management API client resources</a> and the <a href="https://github.com/eclipse/hawkbit-examples/tree/master/hawkbit-example-ddi-feign-client">DDI client resources</a>. |
| A small <a href="https://github.com/eclipse/hawkbit-examples/tree/master/hawkbit-example-mgmt-simulator">simulator application</a> demonstrates how you can interact with the hawkBit via the <a href="http://www.eclipse.org/hawkbit/documentation/interfaces/management-api.html">Management API |
| </a>.</p> |
| |
| <h2 id="example-management-api-simulator">Example Management API simulator</h2> |
| |
| <p>In the follow code section, you can a see a feign client resource example. The interface extend the origin api interface to declare the <code>@FeignClient</code>. The <code>@FeignClient</code>declares that a REST client with that interface should be created.</p> |
| |
| <pre><code class="language-Java">@FeignClient(url = "${hawkbit.url:localhost:8080}/" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) |
| public interface MgmtTargetClientResource extends MgmtTargetRestApi { |
| } |
| </code></pre> |
| |
| <p>This interface can be autowired and use as a normal java interface:</p> |
| |
| <pre><code class="language-Java">public class CreateStartedRolloutExample { |
| |
| @Autowired |
| private MgmtTargetClientResource targetResource; |
| |
| |
| public void run() { |
| // create ten targets |
| targetResource.createTargets(new TargetBuilder().controllerId("00-FF-AA-0").name("00-FF-AA-0") |
| .description("Targets used for rollout example").buildAsList(10)); |
| } |
| |
| </code></pre> |
| |
| <p>At <a href="https://github.com/eclipse/hawkbit-examples/tree/master/hawkbit-example-core-feign-client">hawkbit-example-core-feign-client</a> is a spring configuration to auto configure some beans, which can be reused for a own feign client.</p> |
| |
| <pre><code class="language-Java">@Configuration |
| @ConditionalOnClass(Feign.class) |
| @Import(FeignClientsConfiguration.class) |
| public class FeignClientConfiguration { |
| |
| @Bean |
| public ApplicationJsonRequestHeaderInterceptor jsonHeaderInterceptor() { |
| return new ApplicationJsonRequestHeaderInterceptor(); |
| } |
| |
| @Bean |
| public Contract feignContract() { |
| return new IgnoreMultipleConsumersProducersSpringMvcContract(); |
| } |
| } |
| |
| </code></pre> |
| |
| <aside class="copyright" role="note"> |
| <div class="logo"> |
| <a href="https://www.eclipse.org" target="_blank"> |
| <img src="/hawkbit/images/eclipse_foundation_logo.png" /> |
| </a> |
| </div> |
| <p class="notice"> |
| |
| © 2021 The Eclipse hawkBit Project – |
| |
| Documentation built with |
| <a href="https://www.gohugo.io" target="_blank">Hugo</a> |
| using the |
| <a href="http://github.com/digitalcraftsman/hugo-material-docs" target="_blank">Material</a> theme. |
| </p> |
| <p class="quickLinks"> |
| <a href="http://www.eclipse.org/legal/privacy.php" target="_blank"> |
| > Privacy Policy |
| </a> |
| <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank"> |
| > Terms of Use |
| </a> |
| <a href="http://www.eclipse.org/legal/copyright.php" target="_blank"> |
| > Copyright Agent |
| </a> |
| <a href="http://www.eclipse.org/legal" target="_blank"> |
| > Legal |
| </a> |
| <a href="https://www.eclipse.org/org/documents/epl-v10.php" target="_blank"> |
| > License |
| </a> |
| </p> |
| </aside> |
| |
| |
| <footer class="footer"> |
| |
| |
| <nav class="pagination" aria-label="Footer"> |
| <div class="previous"> |
| |
| <a href="https://www.eclipse.org/hawkbit/guides/clustering/" title="Clustering"> |
| <span class="direction"> |
| Previous |
| </span> |
| <div class="page"> |
| <div class="button button-previous" role="button" aria-label="Previous"> |
| <i class="icon icon-back"></i> |
| </div> |
| <div class="stretch"> |
| <div class="title"> |
| Clustering |
| </div> |
| </div> |
| </div> |
| </a> |
| |
| </div> |
| |
| <div class="next"> |
| |
| <a href="https://www.eclipse.org/hawkbit/guides/runhawkbit/" title="Run hawkBit"> |
| <span class="direction"> |
| Next |
| </span> |
| <div class="page"> |
| <div class="stretch"> |
| <div class="title"> |
| Run hawkBit |
| </div> |
| </div> |
| <div class="button button-next" role="button" aria-label="Next"> |
| <i class="icon icon-forward"></i> |
| </div> |
| </div> |
| </a> |
| |
| </div> |
| </nav> |
| |
| |
| |
| |
| |
| </footer> |
| </div> |
| </article> |
| |
| <div class="results" role="status" aria-live="polite"> |
| <div class="scrollable"> |
| <div class="wrapper"> |
| <div class="meta"></div> |
| <div class="list"></div> |
| </div> |
| </div> |
| </div> |
| </main> |
| |
| <script> |
| |
| var base_url = 'https:\/\/www.eclipse.org\/hawkbit\/'; |
| var repo_id = 'eclipse\/hawkbit'; |
| |
| </script> |
| |
| <script src="https://www.eclipse.org/hawkbit/javascripts/application.js"></script> |
| |
| |
| <script> |
| /* Add headers to scrollspy */ |
| var headers = document.getElementsByTagName("h2"); |
| var scrollspy = document.getElementById('scrollspy'); |
| |
| if(scrollspy) { |
| if(headers.length > 0) { |
| for(var i = 0; i < headers.length; i++) { |
| var li = document.createElement("li"); |
| li.setAttribute("class", "anchor"); |
| |
| var a = document.createElement("a"); |
| if(!headers[i].id) |
| a.setAttribute("href", headers[i].parentNode.href); |
| else |
| a.setAttribute("href", "#" + headers[i].id); |
| a.setAttribute("title", headers[i].innerHTML); |
| a.innerHTML = headers[i].innerHTML; |
| |
| li.appendChild(a); |
| scrollspy.appendChild(li); |
| } |
| } else { |
| scrollspy.parentElement.removeChild(scrollspy) |
| } |
| |
| |
| /* Add permanent link next to the headers */ |
| var headers = document.querySelectorAll("h1, h2, h3, h4, h5, h6"); |
| |
| for(var i = 0; i < headers.length; i++) { |
| var a = document.createElement("a"); |
| a.setAttribute("class", "headerlink"); |
| a.setAttribute("href", "#" + headers[i].id); |
| a.setAttribute("title", "Permanent link"); |
| a.innerHTML = "#"; |
| headers[i].appendChild(a); |
| } |
| } |
| </script> |
| |
| <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.8.0/highlight.min.js"></script> |
| <script>hljs.initHighlightingOnLoad();</script> |
| </body> |
| </html> |
| |