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

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

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

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
91精品福利观看| 亚洲精品护士| 国产精品欧美一区二区三区不卡| 老鸭窝亚洲一区二区三区| 91久久国产| 免费毛片在线不卡| 午夜精品婷婷| 亚洲免费中文| 蜜桃久久精品一区二区| 快she精品国产999| 亚洲精品888| 成人精品天堂一区二区三区| 免费一二一二在线视频| 欧美日韩精品免费观看视欧美高清免费大片 | 婷婷亚洲成人| 国产农村妇女精品一二区| 日韩制服丝袜av| 日韩国产精品久久久久久亚洲| 亚洲精品黄色| 国产图片一区| 精品视频在线一区二区在线| 三上亚洲一区二区| 视频二区不卡| 天使萌一区二区三区免费观看| 亚洲久久在线| 国产高清精品二区| 韩国久久久久久| 欧美成人国产| 免费国产亚洲视频| 国产乱论精品| 欧产日产国产精品视频| 亚洲精品在线观看91| 丝袜美腿亚洲色图| 青青草国产成人99久久| 久久亚洲国产精品尤物| 久久国产中文字幕| 亚洲午夜免费| 久久中文字幕一区二区三区| 久久人人97超碰国产公开结果| 麻豆精品网站| 国产精品玖玖玖在线资源| 欧美日韩国产v| 蜜臀国产一区二区三区在线播放| 久久国内精品| 欧美亚洲国产精品久久| 日韩欧美2区| av在线资源| 丝袜a∨在线一区二区三区不卡| 欧美私人啪啪vps| 国产精品久久久久久久久妇女| 美女久久久久| 国产精品一区二区美女视频免费看| 正在播放日韩精品| 亚洲日本欧美| 97在线精品| 日本一区福利在线| 婷婷综合六月| 国产欧美日韩亚洲一区二区三区| 免费污视频在线一区| 日本亚洲视频| 久久久天天操| 国产欧美欧美| 国产精品毛片一区二区三区| 欧美影院精品| 欧美精品羞羞答答| 青青草国产成人99久久| 欧美特黄a级高清免费大片a级| 国产午夜久久av| 国产精品美女久久久| 高清不卡一区| 日本久久一区| 国产综合精品一区| 卡一卡二国产精品| 亚洲一二三区视频| 久久精品国产大片免费观看| 久久国产精品美女| 免费看欧美美女黄的网站| 美女福利一区二区三区| 日韩欧美中文字幕在线视频| 成人午夜精品| 国产精品久久久久久av公交车| 99日韩精品| 国产精品精品| 国产精品羞羞答答在线观看| 视频一区免费在线观看| 999国产精品999久久久久久| 久久精品国产99国产| 日韩激情网站| 中文欧美日韩| 日本精品在线中文字幕| 久久精品伊人| 欧美在线91| 免费成人在线观看| 欧美精品自拍| 成人av三级| 久久只有精品| 欧美亚洲三区| 中文字幕一区二区三区在线视频| 激情欧美一区二区三区| av最新在线| 国产精品hd| 青青草精品视频| 中文字幕日本一区二区| 99国产成+人+综合+亚洲欧美| 欧美片第1页| 免费一级欧美片在线观看网站| 国产精品腿扒开做爽爽爽挤奶网站| 国产激情欧美| 欧美三区不卡| 99精品视频精品精品视频| 麻豆极品一区二区三区| 青草综合视频| 日本久久二区| 亚洲+小说+欧美+激情+另类| 亚洲欧美日韩国产| 欧美日韩一二| 99久久久久国产精品| 日韩国产一区二区三区| 麻豆91小视频| 国产精一区二区| 日本麻豆一区二区三区视频| 亚洲精品一级| 亚洲九九精品| 一区二区国产在线观看| 午夜久久久久| 欧美日韩高清| 欧美91精品| 好吊日精品视频| 亚洲成人免费| 国产视频一区免费看| 一区二区亚洲精品| 好看不卡的中文字幕| 女人av一区| 亚洲精品网址| 在线精品观看| 日韩精品一页| 欧美综合精品| 国产日韩欧美中文在线| 久久国产日韩欧美精品| 中文字幕日韩亚洲| 日本午夜精品| 国产精品九九| 国产va在线视频| 色88888久久久久久影院| 在线日韩中文| 欧美专区在线| 日韩精品视频一区二区三区| 青青草精品视频| 久久精品国产在热久久| 丁香六月综合| 亚洲高清影视| 亚洲2区在线| 美女久久久精品| 日韩电影在线视频| 国产主播一区| 视频一区二区三区在线| 久久精品xxxxx| 精品一区二区三区视频在线播放| 高清日韩中文字幕| 99视频一区| 青青草伊人久久| 精品视频在线你懂得| 欧美日韩一二三四| 亚洲精品女人| 国际精品欧美精品| 136国产福利精品导航网址| 首页欧美精品中文字幕| 国产日韩免费| 欧美日韩精品免费观看视完整| 久久久五月天| 综合激情一区| 精品中文字幕一区二区三区| 精品一区毛片| 日韩一区二区三区四区五区| 国产精品密蕾丝视频下载| 日产精品一区| 日韩av不卡一区二区| 国产福利亚洲| 亚洲女同一区| 久久99精品久久久野外观看| 九色porny丨国产首页在线| 丝袜诱惑制服诱惑色一区在线观看 | 精精国产xxxx视频在线播放| 国产一级久久| 久久精品国产福利| 久久亚洲风情| 精品一区二区三区中文字幕视频| 免费不卡中文字幕在线| 国产亚洲精品精品国产亚洲综合| 成人看片网站| 欧美精品国产白浆久久久久| 激情五月综合网| 精品一区电影| 亚洲久久一区| 国产精品伦理久久久久久| 免费成人在线影院| 色天使综合视频| 国产欧美三级| 中文久久精品| 黑人精品一区|