如何设计SpringBoot实现跨系统接口调用的长尾词方案?
- 内容介绍
- 文章标签
- 相关推荐
本文共计851个文字,预计阅读时间需要4分钟。
一、简介项目开发中存在系统间交互问题,不想使用Dubbo,以下提供几种Spring Boot方案:
二、方案方案一:使用Feign进行消费(推荐)方案二:使用原始httpClient请求方案三:使用RestTemplate方法
一、简介
项目开发中存在系统之间互调问题,又不想用dubbo,这里提供几种springboot方案:
1、使用Feign进行消费(推荐)
2、使用原始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对象会作为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 = "restapi.amap.com/v3/ip?key={?}"; forEntity = restTemplate.getForEntity(url, String.class, "075b6eddd825148a674dfa8a8558ac62"); //方法二:getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables),map传参 url = "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("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: 远程连接工具类 */ @Service public 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>> spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate
以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。
本文共计851个文字,预计阅读时间需要4分钟。
一、简介项目开发中存在系统间交互问题,不想使用Dubbo,以下提供几种Spring Boot方案:
二、方案方案一:使用Feign进行消费(推荐)方案二:使用原始httpClient请求方案三:使用RestTemplate方法
一、简介
项目开发中存在系统之间互调问题,又不想用dubbo,这里提供几种springboot方案:
1、使用Feign进行消费(推荐)
2、使用原始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对象会作为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 = "restapi.amap.com/v3/ip?key={?}"; forEntity = restTemplate.getForEntity(url, String.class, "075b6eddd825148a674dfa8a8558ac62"); //方法二:getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables),map传参 url = "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("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: 远程连接工具类 */ @Service public 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>> spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate
以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

