日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用SpringBoot跨系統調用接口的方案

瀏覽:33日期:2023-03-26 14:25:45
一、簡介

項目開發中存在系統之間互調問題,又不想用dubbo,這里提供幾種springboot方案:

1、使用Feign進行消費(推薦)

2、使用原始httpClient請求

3、使用RestTemplate方法

二、方案方案一:使用Feign進行消費(推薦)

1、在maven中添加依賴

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.2</version></dependency>

2、啟動類上加上@EnableFeignClients

@EnableHystrix@EnableDiscoveryClient@EnableFeignClients(basePackages = {'com.aaa.aurora'})@SpringBootApplication@EnableTransactionManagement@ComponentScan(basePackages = 'com.aaa.aurora')@ImportResource(locations= {'classpath:spring.xml','spring-security.xml'})@MapperScan('com.aaa.aurora.mapper')public class AuroraWebApplication { public static void main(String[] args) { SpringApplication.run(AuroraWebApplication.class, args); }}

3、編寫service接口

@FeignClient(url = '${pangu.url}',name = 'panguUrl')public interface PanGuService { @RequestMapping(value = '/pangu/restful/check',method = RequestMethod.POST) JSONObject check(@RequestParam(name='queryEngine') String queryEngine, @RequestParam(name='querySql') String querySql, @RequestParam(name='jobNo') String jobNo);}

其中:pangu.url是配置在application.properties中的ip及端口

pangu.url = 192.168.1.3:8080/pangu/restful/check是要調的接口名

4、代碼中調用

@Autowired private PanGuService panGuService; JSONObject jsonObject = null; try { jsonObject = panGuService.auroraPriviledge(PRESTO_DRIVER, query.get('sql'), user.getWorkNo()); } catch (Exception e) { throw new Exception('請求系統異常'); } if (PANGU_FAIL.equals(jsonObject.get('code'))) { LOG.info(jsonObject.get('msg').toString()); throw new BusinessException(jsonObject.get('msg').toString()); }方案二:使用原始httpClient請求

使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步即可。

1. 創建HttpClient對象。

2. 創建請求方法的實例,并指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。

3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HttpParams params)方法來添加請求參數;對于HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。

4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。

5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。

6. 釋放連接。無論執行方法是否成功,都必須釋放連接。

public JSONObject doPost(String queryEngine, String querySql, String jobNo) { JSONObject jsonObject = null; //1.創建httpClient對象 CloseableHttpClient client = HttpClients.createDefault(); //2.創建請求方法的實例,并指定請求URL String url = 'http://192.168.1.11:8080'; HttpPost post = new HttpPost(url); post.setHeader('Content-Type', 'application/json;charset=utf8'); //3.參數 AuroraPriviledge auroraPriviledge = new AuroraPriviledge(); auroraPriviledge.setQueryEngine(queryEngine); auroraPriviledge.setQuerySql(querySql); auroraPriviledge.setJobNo(jobNo); String jsonString = JSON.toJSONString(auroraPriviledge); StringEntity entity = new StringEntity(jsonString, 'UTF-8'); post.setEntity(entity); //4.調用execute,返回response CloseableHttpResponse response = null; try { response = client.execute(post); HttpEntity responseEntity = response.getEntity(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (client != null) { client.close(); } if (response != null) { response.close(); } } catch (IOException e) { e.printStackTrace(); } } return jsonObject; }方案三:使用RestTemplate方法

1.get請求:getForObject(...)和getForEntity(...)兩個方法,區別在于前者直接返回預期的對象,即返回體中的body對象,后者返回的是ResponseEntity封裝類,里面包含了HTTP請求的頭信息。

2.post請求:與get請求類似,只是多一個request參數,request對象會作為httpEntity進行處理。

package com.yyy.aurora; import org.springframework.http.ResponseEntity;import org.springframework.web.client.RestTemplate; import java.net.URI;import java.util.HashMap;import java.util.Map; /** * Description * * @author Bob * @date 2020/4/15 **/public class TestRest { public static void main(String[] args) { RestTemplate restTemplate = new RestTemplate(); //get請求 //方法一:getForEntity(String url, Class<T> responseType, Object... uriVariables),沒有參數 String url = 'https://restapi.amap.com/v3/ip?key=075b6eddd825148a674dfa8a8558ac62'; ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); System.out.println(forEntity); // <200,{'status':'1','info':'OK','infocode':'10000','province':'上海市','city':'上海市','adcode':'310000','rectangle':'120.8397067,30.77980118;122.1137989,31.66889673'},{Server=[Tengine], Date=[Sat, 18 Apr 2020 02:47:38 GMT], Content-Type=[application/json;charset=UTF-8], Content-Length=[167], Connection=[close], X-Powered-By=[ring/1.0.0], gsid=[011130051098158717805837600019751129378], sc=[0.071], Access-Control-Allow-Origin=[*], Access-Control-Allow-Methods=[*], Access-Control-Allow-Headers=[DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,key,x-biz,x-info,platinfo,encr,enginever,gzipped,poiid]}> String s = restTemplate.getForObject(url, String.class); System.out.println(s); // {'province':'上海市','city':'上海市','adcode':'310000','infocode':'10000','rectangle':'120.8397067,30.77980118;122.1137989,31.66889673','status':'1','info':'OK'} //方法一:getForEntity(String url, Class<T> responseType, Object... uriVariables),url中用占位符,傳入參數 //該方法提供了三個參數,其中var1為請求的地址(即url),var2為請求響應body的包裝類型,var3為url中的參數綁定 url = 'https://restapi.amap.com/v3/ip?key={?}'; forEntity = restTemplate.getForEntity(url, String.class, '075b6eddd825148a674dfa8a8558ac62'); //方法二:getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables),map傳參 url = 'https://restapi.amap.com/v3/ip?key={key}'; Map<String, Object> map = new HashMap<>(); map.put('key', '075b6eddd825148a674dfa8a8558ac62'); forEntity = restTemplate.getForEntity(url, String.class, map); //方法三:getForEntity(URI url, Class<T> responseType),uri傳參 URI uri = URI.create('https://restapi.amap.com/v3/ip?key=075b6eddd825148a674dfa8a8558ac62'); forEntity = restTemplate.getForEntity(uri, String.class); //post請求,與get請求類型,只是多一個必填request對象 //postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) forEntity = restTemplate.postForEntity(url, null, String.class, '075b6eddd825148a674dfa8a8558ac62'); s = restTemplate.postForObject(url, null, String.class, '075b6eddd825148a674dfa8a8558ac62'); }}

補充:SpringBoot關于系統之間的遠程互相調用

1、SpringBoot關于系統之間的遠程互相調用

可以采用RestTemplate方式發起Rest Http調用,提供有get、post等方式。

1、1遠程工具類

此處使用Post方式,參考下面封裝的HttpClient類 1.1

/** * Created by @kai on 2018/12/24/024. * Time: 13:54 * Desc: 遠程連接工具類 */@Servicepublic class HttpClient {​ /** * 根據遠程地址發起訪問-參數類型為form表單 * @param url 遠程地址 * @param method 遠程方法 * @param params 方法參數 * @return */ public Object client(String url,HttpMethod method,MultiValueMap<String,String> params){ RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add('Content-Type', 'application/x-www-form-urlencoded'); HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, headers); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,httpEntity,String.class); String body = responseEntity.getBody(); JSONObject jsonObject = JSONObject.parseObject(body); return jsonObject.get('data'); }​ /** * 根據遠程地址發起訪問-參數類型為JSON * @param url 遠程地址 * @param method 遠程方法 * @param params 方法參數 * @return */ public Object clientJson(String url,HttpMethod method,Map<String,Object> params){ RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); cn.hutool.json.JSONObject jsonObject = JSONUtil.parseFromMap(params); HttpEntity<cn.hutool.json.JSONObject> httpEntity = new HttpEntity<>(jsonObject, headers); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,httpEntity,String.class); String body = responseEntity.getBody(); JSONObject jsonObjectResult = JSONObject.parseObject(body); return jsonObjectResult.get('data'); }​}

[ 1.1​]

1、2遠程參數說明

工具類中提供了遠程過程中傳遞參數的兩種格式:

其中 headers.add('Content-Type', 'application/x-www-form-urlencoded') 為form表單格式,支持鍵值對數據傳輸;

當參數類型為form表單時,數據需要封裝成MultiValueMap<String,String>格式,前臺使用controller接受時,可以直接使用 MultiValueMap 變量接收,參照代碼如下 1.2

/** * 保存分組策略對象 * @param * @return */@RequestMapping(value = '/saveDocGroupPolicy',method = RequestMethod.POST)public ApiResult saveGroupPolicy(@RequestParam MultiValueMap<String,String> paramMap,@Valid GroupStrategyIO groupStrategyIO){ Integer userId = ShiroUtil.getExamUserId(); List<String> userList = new ArrayList<>(); userList.add(userId+''); paramMap.put('userId',userList); Object jsonObject = httpClient.client(ExamConfigConstants.url+'/exam/configPolicy/saveDocGroupPolicy', HttpMethod.POST, paramMap); return ApiResult.success(jsonObject);}

[ 1.2] 接受參數為form對象

headers.setContentType(MediaType.APPLICATION_JSON_UTF8)

為json數據格式

當參數為json格式時,遠程服務器接受參數需加上注解@RequestBody,對于復雜參數可以使用對象接受,將對象轉為Map,對數據進行加工,再將map轉化為JSONObject,參照代碼如下:1.3

/** * 保存試卷策略 * @param paperStrategyIO 試卷策略對象 * @return */@RequestMapping(value = '/savePaperConfig')public ApiResult savePaperConfig(@RequestBody PaperStrategyIO paperStrategyIO){ Map<String, Object> paramMap = BeanUtil.beanToMap(paperStrategyIO); Integer userId = ShiroUtil.getExamUserId(); paramMap.put('userId',userId); Object jsonObject = httpClient.clientJson(ExamConfigConstants.url+'/exam/paper/savePaperConfigWithMap', HttpMethod.POST, paramMap); return ApiResult.success(jsonObject);}

[ 1.3​] 接收參數為復雜json串

2、后記

關于RestTemplate還有很多可調用的API,可以查看官方網站了解

http://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产免费| 欧美一区二区三区久久| 国产亚洲精品美女久久久久久久久久| 黑丝美女一区二区| a国产在线视频| 精品国产91| 美女在线视频一区| 国产欧美一区| 欧美1区2区3| 国产福利资源一区| 国产乱码精品一区二区亚洲| 国产日韩一区二区三免费高清| 日本一区免费网站| 日本不卡视频在线观看| 日韩午夜精品| 国产亚洲精品自拍| 性一交一乱一区二区洋洋av| 蜜桃视频一区二区三区在线观看| 三级亚洲高清视频| 日韩一区二区三区免费视频 | 国产亚洲在线| 中文在线一区| 亚洲人成网77777色在线播放| 日韩中文字幕亚洲一区二区va在线| 免费人成在线不卡| 日韩制服丝袜av| 最新国产精品| 欧美精品不卡| 欧美天堂视频| 99国产成+人+综合+亚洲欧美| 中文字幕av一区二区三区四区| 欧美日本一区| 波多视频一区| 黑丝一区二区三区| 亚洲图片久久| 久久中文精品| 日韩一区电影| 久热精品在线| 国产精品亚洲综合久久| 免费福利视频一区二区三区| 精品捆绑调教一区二区三区| 在线国产一区二区| 日韩欧美在线精品| 韩日一区二区| 午夜国产一区二区| 蜜臀va亚洲va欧美va天堂| 国产欧美91| 久久狠狠婷婷| 亚州精品视频| 国产一区2区在线观看| 欧美日中文字幕| 日本不卡在线视频| 在线看片福利| 久草精品视频| 国产免费成人| 日韩av在线免费观看不卡| 国产精品福利在线观看播放| 精品一区免费| 国产精品主播| 亚洲香蕉网站| 欧美在线观看天堂一区二区三区| 久久伊人国产| 亚洲男女自偷自拍| 欧美91在线|欧美| 狠狠色综合网| 久久99免费视频| 91高清一区| 你懂的国产精品| 国产亚洲欧洲| 98精品视频| 亚洲精品美女91| 国产麻豆久久| 国产精品一区毛片| 婷婷综合五月| 精品一区二区三区亚洲| 亚洲激情欧美| 国产一区二区三区久久久久久久久| 蜜臀精品久久久久久蜜臀| 92国产精品| 国产亚洲精品美女久久| 国产亚洲在线观看| 国产一区二区三区国产精品| 99视频一区| 日韩欧美午夜| 国产精品高清一区二区| 欧美精品一线| 精品网站aaa| 亚洲精品影视| 日韩一区二区久久| 日韩视频网站在线观看| 久久av网站| 日韩av一二三| 先锋亚洲精品| 午夜久久免费观看| bbw在线视频| 精品久久亚洲| 91成人小视频| 在线一区二区三区视频| 激情久久久久久| 91亚洲国产高清| 久久精品99国产精品日本| 99riav国产精品| 久久精品123| 香蕉成人av| 国产成人免费视频网站视频社区| 日韩中文av| 亚洲一区欧美| 国产视频欧美| 伊人精品视频| 999久久久91| 一本大道色婷婷在线| 国产suv精品一区二区四区视频 | 亚洲一级二级| 91tv亚洲精品香蕉国产一区| 国产一区二区三区亚洲| 国产精品香蕉| 国产麻豆一区| 日本成人手机在线| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品婷婷| 老鸭窝毛片一区二区三区| 精品在线99| 99国产一区| 丝袜脚交一区二区| 巨乳诱惑日韩免费av| 香蕉久久国产| 中文精品电影| 水蜜桃久久夜色精品一区的特点| 欧美日韩国产精品一区二区亚洲| 久久裸体视频| 免费欧美一区| 中文日韩在线| 亚洲精品进入| 日韩精品三区四区| 亚州国产精品| 国产日韩三级| 国产精品白丝久久av网站 | 97久久亚洲| 欧美一级二级视频| 国产精品sss在线观看av| 欧美影院精品| 国产精品99一区二区三| 蜜桃av.网站在线观看| 99久久九九| 夜夜嗨网站十八久久| 视频一区中文字幕国产| 亚洲精品乱码| 国产精品亚洲人成在99www | 国产亚洲欧美日韩在线观看一区二区| 国产劲爆久久| 国产一区调教| 日韩欧美一区二区三区在线观看 | 国产在线日韩| 亚洲精品a级片| 美国三级日本三级久久99| 亚洲欧美日本国产 | 亚洲日本免费电影| 国产福利亚洲| 国产一区二区三区四区五区| 成人va天堂| 久久99伊人| 欧美精品三级在线| 福利一区二区免费视频 | 欧美精品高清| 中文一区在线| 国产精品一区二区三区四区在线观看| 国产精品久久国产愉拍| 亚洲一级少妇| 视频一区二区欧美| 久久不卡日韩美女| 欧美freesex黑人又粗又大| 狠狠久久婷婷| 国产精品综合色区在线观看| 欧美一级鲁丝片| 男人操女人的视频在线观看欧美| 日本视频中文字幕一区二区三区| 国产一区二区精品福利地址| 亚洲国产不卡| 日韩欧美高清一区二区三区| 国产成人精品一区二区免费看京 | 国产日韩欧美一区二区三区| 91一区二区| 视频一区视频二区中文| 麻豆一区二区三区| 亚洲欧美日韩国产| 久久99偷拍| 亚洲经典在线| 国产精品久久久久久模特| 久久久成人网| 亚洲乱码一区| 视频二区不卡| 久久国产免费看| 日韩欧美少妇| 国产精品久久久久久久久久妞妞| 亚洲一级网站| 精品国产一区二| 三级在线观看一区二区| sm捆绑调教国产免费网站在线观看| 奶水喷射视频一区| 天堂av在线|