| |
| <!doctype html> |
| <html lang="en" class="no-js"> |
| <head> |
| |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| |
| |
| |
| |
| <link rel="prev" href="../swagger-annotation/"> |
| |
| |
| <link rel="next" href="../jaxrs/"> |
| |
| |
| <link rel="icon" href="../../assets/images/favicon.png"> |
| <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.19"> |
| |
| |
| |
| <title>Develop with SpringMVC - ServiceComb Java Chassis Developers Guide</title> |
| |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/main.66ac8b77.min.css"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"> |
| <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style> |
| |
| |
| |
| <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> |
| |
| |
| |
| |
| |
| |
| </head> |
| |
| |
| <body dir="ltr"> |
| |
| |
| <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
| <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
| <label class="md-overlay" for="__drawer"></label> |
| <div data-md-component="skip"> |
| |
| |
| <a href="#develop-microservice-with-springmvc" class="md-skip"> |
| Skip to content |
| </a> |
| |
| </div> |
| <div data-md-component="announce"> |
| |
| </div> |
| |
| |
| |
| |
| |
| |
| <header class="md-header md-header--shadow" data-md-component="header"> |
| <nav class="md-header__inner md-grid" aria-label="Header"> |
| <a href="../.." title="ServiceComb Java Chassis Developers Guide" class="md-header__button md-logo" aria-label="ServiceComb Java Chassis Developers Guide" data-md-component="logo"> |
| |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg> |
| |
| </a> |
| <label class="md-header__button md-icon" for="__drawer"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> |
| </label> |
| <div class="md-header__title" data-md-component="header-title"> |
| <div class="md-header__ellipsis"> |
| <div class="md-header__topic"> |
| <span class="md-ellipsis"> |
| ServiceComb Java Chassis Developers Guide |
| </span> |
| </div> |
| <div class="md-header__topic" data-md-component="header-topic"> |
| <span class="md-ellipsis"> |
| |
| Develop with SpringMVC |
| |
| </span> |
| </div> |
| </div> |
| </div> |
| |
| |
| <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> |
| |
| |
| |
| <label class="md-header__button md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> |
| </label> |
| <div class="md-search" data-md-component="search" role="dialog"> |
| <label class="md-search__overlay" for="__search"></label> |
| <div class="md-search__inner" role="search"> |
| <form class="md-search__form" name="search"> |
| <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> |
| <label class="md-search__icon md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> |
| </label> |
| <nav class="md-search__options" aria-label="Search"> |
| |
| <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> |
| </button> |
| </nav> |
| |
| </form> |
| <div class="md-search__output"> |
| <div class="md-search__scrollwrap" data-md-scrollfix> |
| <div class="md-search-result" data-md-component="search-result"> |
| <div class="md-search-result__meta"> |
| Initializing search |
| </div> |
| <ol class="md-search-result__list" role="presentation"></ol> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| </nav> |
| |
| </header> |
| |
| <div class="md-container" data-md-component="container"> |
| |
| |
| |
| |
| |
| |
| <main class="md-main" data-md-component="main"> |
| <div class="md-main__inner md-grid"> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| |
| |
| <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0"> |
| <label class="md-nav__title" for="__drawer"> |
| <a href="../.." title="ServiceComb Java Chassis Developers Guide" class="md-nav__button md-logo" aria-label="ServiceComb Java Chassis Developers Guide" data-md-component="logo"> |
| |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg> |
| |
| </a> |
| ServiceComb Java Chassis Developers Guide |
| </label> |
| |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../.." class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Introduction |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Getting Started |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_2"> |
| <span class="md-nav__icon md-icon"></span> |
| Getting Started |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../start/terminology/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Glossary |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../start/architecture/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Architecture |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../start/development-environment/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Development environment |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../start/first-sample/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Develop the first microservice |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Development Service Provider |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true"> |
| <label class="md-nav__title" for="__nav_3"> |
| <span class="md-nav__icon md-icon"></span> |
| Development Service Provider |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../definition/service-definition/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Service definition |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../define-contract/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Service contract definition |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../code-first/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Implicit API definition |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../swagger-annotation/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Use Swagger annotations |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active"> |
| |
| <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> |
| |
| |
| |
| |
| |
| <label class="md-nav__link md-nav__link--active" for="__toc"> |
| |
| |
| <span class="md-ellipsis"> |
| Develop with SpringMVC |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <a href="./" class="md-nav__link md-nav__link--active"> |
| |
| |
| <span class="md-ellipsis"> |
| Develop with SpringMVC |
| </span> |
| |
| |
| </a> |
| |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#concept-description" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Concept Description |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#development-example" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Development Example |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Development Example"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#step1-define-the-service-interface-optional" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step1 Define the service interface (optional) |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#step2-implement-the-services" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step2 Implement the services |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#step4-wrtie-a-main-class" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step4 Wrtie a main class |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#using-pojo-as-query-parameters" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Using POJO as query parameters |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Using POJO as query parameters"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#description" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Description |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#examples" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Examples |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Examples"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#provider" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Provider |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#consumer" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Consumer |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#servicecomb-suppoted-spring-mvc-annotations-and-differences" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| ServiceComb suppoted Spring MVC annotations and differences |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="ServiceComb suppoted Spring MVC annotations and differences"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#table-1-1-annotations" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Table 1-1 annotations |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../jaxrs/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Develop with JAX-RS |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../transparent-rpc/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Develop with Transparent RPC |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../interface-constraints/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Interface definition and data type |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../listen-address-and-publish-address/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Service listening address and publishing address |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../thread-pool/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Thread pool |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_11" id="__nav_3_11_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Service Configuration |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_11"> |
| <span class="md-nav__icon md-icon"></span> |
| Service Configuration |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../configuration/ratelimite-strategy/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Rate Limiting Policy |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../configuration/parameter-validator/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Parameter Validator |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../bootup/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Boot-up Process |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../access-log-configuration/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Access Log Configuration |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Writing Service Consumer |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4"> |
| <span class="md-nav__icon md-icon"></span> |
| Writing Service Consumer |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/common-configuration/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Consumer common configuration |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/using-resttemplate/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using Rest Template |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/using-AsyncRestTemplate/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using AsyncRestTemplate |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/develop-consumer-using-rpc/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using with RPC |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/with-contract/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Contract |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Invoke control |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_6"> |
| <span class="md-nav__icon md-icon"></span> |
| Invoke control |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/flow-control/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Flow Control |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/fault-injection/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Fault Injection |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../build-consumer/3rd-party-service-invoke/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Invoke 3rd-party REST services |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > |
| |
| |
| <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Transports |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5"> |
| <span class="md-nav__icon md-icon"></span> |
| Transports |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../transports/rest-over-servlet/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| REST over Servlet |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../transports/rest-over-vertx/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| REST over Vertx |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../transports/highway-rpc/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Highway |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../transports/http2/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| HTTP2 |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| General Development |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_6"> |
| <span class="md-nav__icon md-icon"></span> |
| General Development |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/visit-sc/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Access Service Center |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/metrics/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Metrics |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/microservice-invocation-chain/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Microservice invocation chain |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/customized-tracing/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Customized-Tracing |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/local-develop-test/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Local development and testing |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/http-filter/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Http Filter |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/file-upload/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| File Uploading |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/file-download/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| File Downloading |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/reactive/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Reactive Programing |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/dnsconfig/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| DNS Custom Configuration |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/dai-li-she-zhi/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Proxy Settings |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/report-framework-version/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Report framework version |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/cross-app-invocation/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Cross-application invocation |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/secret-field/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Customized serialization and deserialization |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/context/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using Context to pass control messages |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/produceprocess/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Return value serialization extension |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/CORS/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| CORS mechanism |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/AlarmEvent/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Get fuse and instance isolation alarm event information |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/shutdown/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Shutdown gracefully |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/error-handling/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Handling exceptions |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/multienvironment/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Multi-environment isolation between microservice instances |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../general-development/thread-model/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Thread Model |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > |
| |
| |
| <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Configuration |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_7"> |
| <span class="md-nav__icon md-icon"></span> |
| Configuration |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../config/general-config/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| General config |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../config/inject-config/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Configuration injection |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" > |
| |
| |
| <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Service Capability Open |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8"> |
| <span class="md-nav__icon md-icon"></span> |
| Service Capability Open |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../edge/open-service/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Intruductions |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../edge/by-servicecomb-sdk/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using Edge Service |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../edge/nginx/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using confd and Nginx as edge services |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../edge/zuul/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Use zuul as edge services |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" > |
| |
| |
| <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Service Packing and Running |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_9"> |
| <span class="md-nav__icon md-icon"></span> |
| Service Packing and Running |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../packaging/standalone/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Standalone mode |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../packaging/web-container/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| WEB container mode |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" > |
| |
| |
| <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Micro Service Security |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_10"> |
| <span class="md-nav__icon md-icon"></span> |
| Micro Service Security |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../security/tls/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using TLS |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../security/rsa/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Using RSA certification |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Using java chassis in Spring Boot |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_11"> |
| <span class="md-nav__icon md-icon"></span> |
| Using java chassis in Spring Boot |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/using-java-chassis-in-spring-boot/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Intruductions |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/components-for-spring-boot/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| spring boot starter for java-chassis |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/java-application/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| JAVA application development |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/web-application/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Web development method development |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/diff-between-java-web/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| The difference between JAVA application method and Web development method |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../using-java-chassis-in-spring-boot/diff-spring-mvc/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| The difference in Spring MVC mode |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_12" > |
| |
| |
| <label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| Handlers reference |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_12"> |
| <span class="md-nav__icon md-icon"></span> |
| Handlers reference |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../references-handlers/intruduction/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Intruductions |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../references-handlers/loadbalance/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Load Balancing |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../references-handlers/publickey/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Public key authentication |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_13" > |
| |
| |
| <label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0"> |
| |
| |
| <span class="md-ellipsis"> |
| FAQ |
| </span> |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_13"> |
| <span class="md-nav__icon md-icon"></span> |
| FAQ |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../question-and-answer/question_answer/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Q & A |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../question-and-answer/faq/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| FAQ |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../question-and-answer/interface-compatibility/" class="md-nav__link"> |
| |
| |
| <span class="md-ellipsis"> |
| Micro Service Interface Compatibility FAQ |
| </span> |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| </ul> |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#concept-description" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Concept Description |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#development-example" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Development Example |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Development Example"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#step1-define-the-service-interface-optional" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step1 Define the service interface (optional) |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#step2-implement-the-services" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step2 Implement the services |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#step4-wrtie-a-main-class" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Step4 Wrtie a main class |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#using-pojo-as-query-parameters" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Using POJO as query parameters |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Using POJO as query parameters"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#description" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Description |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#examples" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Examples |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Examples"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#provider" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Provider |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#consumer" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Consumer |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#servicecomb-suppoted-spring-mvc-annotations-and-differences" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| ServiceComb suppoted Spring MVC annotations and differences |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="ServiceComb suppoted Spring MVC annotations and differences"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#table-1-1-annotations" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| Table 1-1 annotations |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-content" data-md-component="content"> |
| <article class="md-content__inner md-typeset"> |
| |
| |
| |
| |
| <h1 id="develop-microservice-with-springmvc">Develop Microservice with SpringMVC</h1> |
| <h2 id="concept-description">Concept Description</h2> |
| <p>ServiceComb supports Spring MVC annotations to define your REST services. The <a href="https://github.com/apache/servicecomb-java-chassis/tree/master/samples/springmvc-sample">samples project</a> has a lot of working examples.</p> |
| <h2 id="development-example">Development Example</h2> |
| <h3 id="step1-define-the-service-interface-optional">Step1 Define the service interface (optional)</h3> |
| <p>Writing a interface for the REST service make it easy to call the service in client in RPC style.</p> |
| <pre><code class="language-java">public interface Hello { |
| String sayHi(String name); |
| String sayHello(Person person); |
| } |
| </code></pre> |
| <h3 id="step2-implement-the-services">Step2 Implement the services</h3> |
| <p>The annotations of Spring MVC are used to describe the development of service code. The implementation of the Hello service is as follow:</p> |
| <p>```java |
| @RestSchema(schemaId = "springmvcHello") |
| @RequestMapping(path = "/springmvchello", produces = MediaType.APPLICATION_JSON) |
| public class SpringmvcHelloImpl implements Hello { |
| @Override |
| @RequestMapping(path = "/sayhi", method = RequestMethod.POST) |
| public String sayHi(@RequestParam(name = "name") String name) { |
| return "Hello " + name; |
| }</p> |
| <pre><code>@Override |
| @RequestMapping(path = "/sayhello", method = RequestMethod.POST) |
| public String sayHello(@RequestBody Person person) { |
| return "Hello person " + person.getName(); |
| } |
| </code></pre> |
| <p>}</p> |
| <pre><code> |
| ### Step3 add a component scan (optional) |
| |
| create `resources/META-INF/spring` folder and add `springmvcprovider.bean.xml`, add component-scan to specify the bean package. This step is optional. The package where main class located is automatically added. |
| |
| ```xml |
| <?xml version="1.0" encoding="UTF-8"?> |
| |
| <beans xmlns="http://www.springframework.org/schema/beans" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xmlns:context="http://www.springframework.org/schema/context" |
| xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd |
| http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> |
| |
| <context:component-scan base-package="org.apache.servicecomb.samples.springmvc.povider"/> |
| </beans> |
| </code></pre> |
| <h3 id="step4-wrtie-a-main-class">Step4 Wrtie a main class</h3> |
| <p>This code using log4j as the logger framework. Users can change it to any other favorite logger framework.</p> |
| <pre><code class="language-java">public class SpringmvcProviderMain { |
| |
| public static void main(String[] args) throws Exception { |
| Log4jUtils.init(); |
| BeanUtils.init(); |
| } |
| } |
| </code></pre> |
| <h2 id="using-pojo-as-query-parameters">Using POJO as query parameters</h2> |
| <h3 id="description">Description</h3> |
| <p>SpringBoot supports to map a bean parameter to HTTP queries.</p> |
| <pre><code class="language-java">@RequestMapping("/hello") |
| public class HelloService { |
| @RequestMapping(value = "/sayHello", method = RequestMethod.GET) |
| public String sayHello(Person person) { |
| System.out.println("sayHello is called, person = [" + person + "]"); |
| return "Hello, your name is " + person.getName() + ", and age is " + person.getAge(); |
| } |
| } |
| </code></pre> |
| <p>ServiceComb supports this usage too, but has following constraints. |
| 1. Must not add any mapping annotations, such as <code>@QueryParam</code> |
| 2. Only map to query parameters, headers and forms not supported. |
| 3. Variables name in POJO definition must be the same as query keys. |
| 4. Only primitive and String types supported in POJO, add <code>@JsonIgnore</code> to other types to ignore it. |
| 5. In consumer site(e.g RestTemplate), still need to use query parameters, can not use POJO.</p> |
| <h3 id="examples">Examples</h3> |
| <h4 id="provider">Provider</h4> |
| <ul> |
| <li>service definition</li> |
| </ul> |
| <pre><code class="language-java"> @RestSchema(schemaId = "helloService") |
| @RequestMapping("/hello") |
| public class HelloService { |
| @RequestMapping(value = "/sayHello", method = RequestMethod.GET) |
| public String sayHello(Person person) { |
| System.out.println("sayHello is called, person = [" + person + "]"); |
| return "Hello, your name is " + person.getName() + ", and age is " + person.getAge(); |
| } |
| } |
| </code></pre> |
| <ul> |
| <li>parameters</li> |
| </ul> |
| <pre><code class="language-java"> public class Person { |
| private String name; |
| private int age; |
| @JsonIgnore // add @JsonIgnore to unsupported types |
| private List<Person> children; |
| } |
| </code></pre> |
| <ul> |
| <li>Schemas</li> |
| </ul> |
| <pre><code class="language-yaml"> |
| basePath: "/hello" |
| paths: |
| /sayHello: |
| get: |
| operationId: "sayHello" |
| parameters: |
| # name and age is query parameter |
| - name: "name" |
| in: "query" |
| required: false |
| type: "string" |
| - name: "age" |
| in: "query" |
| required: false |
| type: "integer" |
| format: "int32" |
| responses: |
| 200: |
| description: "response of 200" |
| schema: |
| type: "string" |
| </code></pre> |
| <h4 id="consumer">Consumer</h4> |
| <ul> |
| <li>Call using RPC</li> |
| <li>add an interface |
| <code>java |
| public interface HelloServiceIntf { |
| String sayHello(String name, int age); |
| }</code></li> |
| <li>call the interface |
| <code>java |
| String result = helloService.sayHello("Bob", 22); // result is "Hello, your name is Bob, and age is 22"</code></li> |
| <li>Call using RestTemplate |
| <code>java |
| String result = restTemplate.getForObject( |
| "cse://provider-service/hello/sayHello?name=Bob&age=22", |
| String.class);</code></li> |
| </ul> |
| <h2 id="servicecomb-suppoted-spring-mvc-annotations-and-differences">ServiceComb suppoted Spring MVC annotations and differences</h2> |
| <p>ServiceComb supports Spring MVC annotatioins(org.springframework.web.bind.annotation) to define REST interfaces, but they are different. ServiceComb do not support <code>@Controller</code> frameworks and only support <code>@RestController</code> frameworks.</p> |
| <ul> |
| <li>Differences in supported annotations</li> |
| </ul> |
| <h3 id="table-1-1-annotations">Table 1-1 annotations</h3> |
| <table> |
| <thead> |
| <tr> |
| <th style="text-align: left;">annotation</th> |
| <th style="text-align: left;">supported</th> |
| <th style="text-align: left;">notes</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td style="text-align: left;">RequestMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;">Can only have one path, multiple path is not supported.</td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">GetMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">PutMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">PostMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">DeleteMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">PatchMapping</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">RequestParam</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">CookieValue</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">PathVariable</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">RequestHeader</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">RequestBody</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;">supports application/json,plain/text</td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">RequestPart</td> |
| <td style="text-align: left;">Yes</td> |
| <td style="text-align: left;">Used in file upload. Using Part、MultipartFile annotations.</td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">ResponseBody</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;">@Controller framework is not supported</td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">ResponseStatus</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;">Using ApiResponse to define status code</td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">RequestAttribute</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">SessionAttribute</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">MatrixVariable</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">ModelAttribute</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">ControllerAdvice</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">CrossOrigin</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">ExceptionHandler</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| <tr> |
| <td style="text-align: left;">InitBinder</td> |
| <td style="text-align: left;">No</td> |
| <td style="text-align: left;"></td> |
| </tr> |
| </tbody> |
| </table> |
| <ul> |
| <li>Define a REST service</li> |
| </ul> |
| <p>Spring MVC using <code>@RestController</code> to define a REST service,ServiceComb using <code>@RestSchema</code> to define a REST service,and path value in <code>@RequestMapping</code> is required.</p> |
| <pre><code class="language-java">@RestSchema(schemaId = "hello") |
| @RequestMapping(path = "/") |
| </code></pre> |
| <p><code>@RestController</code> is also supported and equals to <code>@RestSchma(schemaId="class name")</code>. However we suggest using <code>@RestSchema</code> to define a schemaId,it's more convenient when used in configurations. </p> |
| <p><strong>Cautions</strong>: If the classes with <code>@RestController</code> are not expected to be processed by ServiceComb-Java-Chassis and work as REST services, the config item <code>servicecomb.provider.rest.scanRestController=false</code> can be specified to disable the feature mentioned above.</p> |
| <ul> |
| <li>Supported data types</li> |
| </ul> |
| <p>Spring MVC supports almost all java types in service difinition, e.g.</p> |
| <pre><code>// abstract class |
| public void postData(@RequestBody Object data) |
| // interface |
| public void postData(@RequestBody IPerson interfaceData) |
| // generic without types |
| public void postData(@RequestBody Map rawData) |
| // servlet types |
| public void postData(HttpServletRequest rquest) |
| </code></pre> |
| <p>ServiceComb need to generate Open API schemas based on definition, and support cross language features, so some of there usage is not supported.</p> |
| <p>HttpServletRequest,Object is supported in latest version, but they are different. We suggest not using there features if possible.</p> |
| <p>please refer to <a href="../interface-constraints/">API Constraints</a> for data type supports.</p> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| |
| <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> |
| </div> |
| |
| </main> |
| |
| <footer class="md-footer"> |
| |
| <div class="md-footer-meta md-typeset"> |
| <div class="md-footer-meta__inner md-grid"> |
| <div class="md-copyright"> |
| |
| |
| Made with |
| <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> |
| Material for MkDocs |
| </a> |
| |
| </div> |
| |
| </div> |
| </div> |
| </footer> |
| |
| </div> |
| <div class="md-dialog" data-md-component="dialog"> |
| <div class="md-dialog__inner md-typeset"></div> |
| </div> |
| |
| |
| <script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> |
| |
| |
| <script src="../../assets/javascripts/bundle.dd8806f2.min.js"></script> |
| |
| |
| </body> |
| </html> |