服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - spring boot中使用http请求的示例代码

spring boot中使用http请求的示例代码

2021-03-01 14:17薛定谔的猫! JAVA教程

本篇文章主要介绍了spring boot中 使用http请求的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

因为项目需求,需要两个系统之间进行通信,经过一番调研,决定使用http请求。

服务端没有什么好说的,本来就是使用web 页面进行访问的,所以spring boot启动后,controller层的接口就自动暴露出来了,客户端通过调用对应的url即可,所以这里主要就客户端。

首先我自定义了一个用来处理http 请求的工具类DeviceFactoryHttp,既然是url访问,那就有两个问题需要处理,一个请求服务的url,和请求服务端的参数,客户端的消息头请求服务的url:请求服务端url我定义的是跟客户端一个样的url服务端的参数:服务端的参数有两种一种经过封装的,类似下面这样:

 http://localhost:8080/switch/getAllStatus?data{"interface name”:”getAllStudentStaus”}

一种是没有经过封装的,类似下面这样:

 http://localhost:8080/switch/getStudentInfoByName?name=zhangSan

首先是经过封装:

一:初始化httpclient

?
1
2
3
4
5
6
7
private static HttpClient client = null;
static {
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(128);
cm.setDefaultMaxPerRoute(128);
client = HttpClients.custom().setConnectionManager(cm).build();
}

二:获取请求的url,因为我服务端定义的url与客户端一样,所以我直接使用请求客户端的url

?
1
2
3
4
5
6
7
8
9
//根据request获取请求的url
public StringBuffer getUrlToRequest(HttpServletRequest request) {
StringBuffer url=request.getRequestURL();//获取请求的url(http://localhost:8080/switch/getStudentInfoByName)
String[] splitArr=url.toString().split("/");
String appName=splitArr[3];//项目名称
String ipReport=splitArr[2];//项目ip:report
String resultStr=url.toString().replaceAll(appName,DevFacConstans.facname).replaceAll(ipReport, DevFacConstans.ip+":"+DevFacConstans.report);
return new StringBuffer(resultStr);
}

获取url根据/ 进行split,因为我这是测试环境,生产环境ip,端口号(域名)肯定不是localhost,有的前面还会加上项目名称,所以我split对应的值来进行替换。

三:拼装请求参数,调用http请求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 发送http请求 有request
* 给controller层调用
* @param request
* @return
*/
public String sendHttpToDevFac(HttpServletRequest request)throws Exception {
HttpClient client = null;
String returnResult="";
// http://localhost:8080/leo/1.0/h5/login
StringBuffer urlBuffer=getUrlToRequest(request);//调用第二步,获取url
//获取参数并拼装
String dataAsJson = request.getParameter("data");
String encoderData=URLEncoder.encode(dataAsJson,"utf-8");
HttpGet get=new HttpGet(urlBuffer.append("?data=").append(encoderData).toString());
//set headers
Enumeration<String> headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName=headerNames.nextElement();
String headerValue=request.getHeader(headerName);
get.setHeader(headerName, headerValue);
}
client=DeviceFactoryHttp.client;
logger.info("开始调用http请求,请求url:"+urlBuffer.toString());
HttpResponse rep=client.execute(get);
returnResult=EntityUtils.toString(rep.getEntity(),"utf-8");
logger.info("http 请求调用结束!!");
return returnResult;
}

先获取请求的参数,再将参数拼装在url后面,URLEncoder.encode 这个不要忘了,因为参数会有一些符号,需要对参数进行编码后再加入url,否则就会抛出异常,set headers:因为有部分信息服务端会从请求头中取出,所以我将客户端的请求头也set到服务端的request中,请求的url和请求的参数拼好就就可以client.exceute(get)执行请求了。

上面的是我浏览器直接将request请求作为参数传到我客户端,我所以我可以直接从request中获取url,有的是没有request,就需要从request的上下文环境中取了。

没有经过封装的:

首先从上下文中获取request的

?
1
2
3
4
5
6
7
8
9
/**
* 获取request
* @return
*/
public static HttpServletRequest getRequest(){
 ServletRequestAttributes ra= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
 HttpServletRequest request = ra.getRequest();
 return request;
}

二:有了request后,就有了url,下面再来解析请求参数,因为这个参数是没有封装的,所以获取所有的请求参数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * 没有request 请求,给controller层调用
 * @param key
 * @param interfaceName
 * @param strings
 * @return
 * @throws Exception
 */
 public String centerToDeviceFacNoRequest(String key,String interfaceName)throws Exception {
 try {
  HttpServletRequest request=getRequest();//上面第一步,从上下文中获取url
  //获取reuquest请求参数
  Enumeration<String> names= request.getParameterNames();
  Map<String,String>paramMap=new HashMap<>();
  //遍历请求map
  while(names.hasMoreElements()) {
   String name=names.nextElement();
   String value=(String) request.getParameter(name);
   paramMap.put(name, value);
  }
  //调用发送http请求的方法
  return sendHttpToDevFacNoData(paramMap,request);
 } catch (Exception e) {
  e.printStackTrace();
 }
 //end
 return null;
 }

三:发送http请求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * 发送http请求,【没有data数据的】
 * @return
 */
 public String sendHttpToDevFacNoData(Map<String,String>paramMap,HttpServletRequest request)throws Exception {
 HttpClient client = null;
 String result="";
 StringBuffer dataBuffer=getUrlToRequest(request);//获取url
 dataBuffer.append("?");
 client=DeviceFactoryHttp.client;
 Iterator<Entry<String, String>> paamIt=paramMap.entrySet().iterator();
 while(paamIt.hasNext()) {
  Entry<String, String> entry=paamIt.next();
  dataBuffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
 }
 String resultUrl=dataBuffer.toString().substring(0, dataBuffer.toString().lastIndexOf("&"));
 //发送请求
 HttpGet get=new HttpGet(resultUrl);
 //set headers
 Enumeration<String> headerNames=request.getHeaderNames();
 while(headerNames.hasMoreElements()) {
  String headerName=headerNames.nextElement();
  String headerValue=request.getHeader(headerName);
  get.setHeader(headerName, headerValue);
 }
 
 HttpResponse rep=client.execute(get);
 logger.info("开始调用http请求,请求url:"+resultUrl);
 //返回结果
 result=EntityUtils.toString(rep.getEntity(),"utf-8");
 logger.info(" http 请求调用结束!!");
 return result;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/zhangXingSheng/p/7745009.html

延伸 · 阅读

精彩推荐
  • JAVA教程浅谈Spring解决循环依赖的三种方式

    浅谈Spring解决循环依赖的三种方式

    本篇文章主要介绍了浅谈Spring循环依赖的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    学习园8692021-02-06
  • JAVA教程Java将对象写入文件读出_序列化与反序列化的实例

    Java将对象写入文件读出_序列化与反序列化的实例

    下面小编就为大家带来一篇Java将对象写入文件读出_序列化与反序列化的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编...

    PersistWp4592020-12-17
  • JAVA教程java 文件上传(单文件与多文件)

    java 文件上传(单文件与多文件)

    这篇文章主要介绍了java 文件上传(单文件与多文件)的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下...

    CSDN_LQR7432021-01-27
  • JAVA教程java 中数组初始化实例详解

    java 中数组初始化实例详解

    这篇文章主要介绍了 本文主要讲数组的初始化方法、可变参数列表以及可变参数列表对函重载的影响的相关资料,需要的朋友可以参考下 ...

    非水非云4642020-11-01
  • JAVA教程struts2自定义MVC框架

    struts2自定义MVC框架

    这篇文章主要为大家详细介绍了struts2如何自定义MVC框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    BEYOND4192020-06-26
  • JAVA教程java实现简单解析XML文件功能示例

    java实现简单解析XML文件功能示例

    这篇文章主要介绍了java实现简单解析XML文件功能,结合实例形式分析了java针对xml文件的读取、遍历节点及输出等相关操作技巧,需要的朋友可以参考下...

    一笑而过6662021-01-18
  • JAVA教程JAVA操作XML实例分析

    JAVA操作XML实例分析

    这篇文章主要介绍了JAVA操作XML的方法,实例分析了java操作XML文件的常用技巧,需要的朋友可以参考下 ...

    疯狂的流浪4882019-12-12
  • JAVA教程完整B树算法Java实现代码

    完整B树算法Java实现代码

    这篇文章主要为大家详细介绍了完整的B树算法Java实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    tclxspy4972020-06-15