一、编写请求配置类

import com.alibaba.fastjson.JSONObject;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.*;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder; import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Objects; @Configuration
public class RestUtils { private static final RestTemplate restTemplate = new RestTemplate(); public static JSONObject get(String url, Map<String,String> urlParams){
return get(urlToUri(url,urlParams));
} //在处理企业微信某些参数时有问题
public static JSONObject get(String url){
return get(URI.create(url));
} private static JSONObject get(URI uri){
ResponseEntity<JSONObject> responseEntity =restTemplate.getForEntity(uri, JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
} public static JSONObject post(String url, Map<String,String> urlParams, JSONObject json){
//组装url
return post(urlToUri(url,urlParams),json);
} public static JSONObject post(String url, JSONObject json){
//组装urL
return post(URI.create(url),json);
} private static JSONObject post(URI uri, JSONObject json){
//组装url
//设置提交json格式数据
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<JSONObject> request = new HttpEntity(json, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(uri,request, JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
} private static URI urlToUri(String url,Map<String,String> urlParams){
//设置提交json格式数据
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(url);
for(Map.Entry<String,String> entry : urlParams.entrySet()) {
uriBuilder.queryParam((String)entry.getKey(), (String) entry.getValue()) ;
}
return uriBuilder.build(true).toUri();
} public static JSONObject upload(String url, MultiValueMap formParams){
//设置表单提交
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(formParams, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url,request, JSONObject.class);
serverIsRight(responseEntity); //判断服务器返回状态码
return responseEntity.getBody();
} public static String download(String url,String targetPath) throws IOException { ResponseEntity<byte[]> rsp = restTemplate.getForEntity(url, byte[].class);
if(rsp.getStatusCode() != HttpStatus.OK){
System.out.println("文件下载请求结果状态码:" + rsp.getStatusCode());
}
// 将下载下来的文件内容保存到本地
Files.write(Paths.get(targetPath), Objects.requireNonNull(rsp.getBody()));
return targetPath; } public static byte[] dowload(String url){
ResponseEntity<byte[]> rsp = restTemplate.getForEntity(url, byte[].class);
return rsp.getBody();
} private static void serverIsRight(ResponseEntity responseEntity){
if(responseEntity.getStatusCodeValue()==200){
}else {
System.out.println("服务器请求异常:{}"+responseEntity.getStatusCodeValue());
}
} }

二、调用测试

/**
* 企业微信-读取成员
* @param userId
* @return
*/
public WxDeptUserResult getQyWxUser(String userId) {
WxDeptUserResult wxDeptResult = new WxDeptUserResult();
getAccesstoken();
try {
//替换掉accessToken
String userIdUrl = USER_DEPT_USER_URL + ACCESSTOKEN + "&userid=" + userId;
//发送get请求
JSONObject jsonObject = RestUtils.get(userIdUrl);
log.info("请求企业微信 {}, 读取成员信息 {}", userIdUrl, jsonObject);
if(jsonObject.get("errcode").equals(0)){
wxDeptResult.setUserid(jsonObject.getString("userid"));
wxDeptResult.setName(jsonObject.getString("name"));
wxDeptResult.setDepartment(((List)jsonObject.get("department")).get(0).toString());
}
} catch (Exception e) {
log.error("调用企业微信你接口-读取成员信息失败"+e.getMessage());
throw new BusinessException(ResultStatus.DEPT_USERINFO_ERROR.message());
}
return wxDeptResult;
}

具体数据如下图所示:

SpringBoot-Http请求工具类的更多相关文章

  1. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

  2. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. HTTP请求工具类

    HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...

  5. 实现一个简单的http请求工具类

    OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...

  6. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  7. C#实现的UDP收发请求工具类实例

    本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...

  8. ajax请求工具类

    ajax的get和post请求工具类: /** * 公共方法类 *  * 使用  变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...

  9. 【原创】标准HTTP请求工具类

    以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...

  10. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

随机推荐

  1. pymysql连接、关闭、查询,python如何操作mysql数据库

    1 def get_conn(): 2 """ 3 :return: 连接,游标 4 """ 5 # 创建连接 6 conn = pymys ...

  2. [Unity3D] 使用LineRenderer实现尾迹与虚线效果

    Unity3D 使用LineRenderer绘制尾迹与虚线 1.添加LineRenderer组件 先创建一个3D对象,然后点击Add Component选项 搜索并添加LineRenderer组件 添 ...

  3. 开源机密计算平台:蓬莱-OpenHarmony

    演讲嘉宾 | 杜   东 回顾整理 | 廖   涛 排版校对 | 李萍萍 嘉宾简介 杜东,上海交通大学助理研究员.中国计算机学会CCF会员,ACM会员.研究兴趣为操作系统与体系结构.服务器无感知(Se ...

  4. C++ STL 容器和算法:详解和实例演示

    C++ STL(标准模板库)提供了一组丰富的容器和算法,使得开发者能够更加高效地编写程序.本文将介绍STL中的一些常用容器和算法. 容器 vector vector是一个动态数组,可以在运行时调整大小 ...

  5. win10上鼠标右键怎么进入cmd

    背景: 在win7上有个很好的功能,在文件夹空白区域,按住 " ctrl + 鼠标右键 " 可以直接打开 cmd 窗口 但是在win10上同样的操作方法,打开的窗口却是 power ...

  6. 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用

    遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理.化学和生物系统的基石.ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力.重点 ...

  7. openGauss支持国密SM3和SM4算法

    国密算法介绍 国密即国家密码局认定的国产密码算法,主要有 SM1,SM2,SM3,SM4.密钥长度和分组长度均为 128 位.针对银行客户对数据库安全能力的诉求以及提高产品安全竞争力的要求,进行数据库 ...

  8. 鸿蒙HarmonyOS实战-ArkUI组件(Popup)

    一.Popup Popup组件通常用于在屏幕上弹出一个对话框或者浮动窗口.这个组件通常和其他组件一起用于用户界面的交互和反馈. Popup组件可以包含任何类型的组件或内容,比如文本.按钮.输入框.图片 ...

  9. 在 Visual Studio 2022 中创建一个类似于旧版本 Visual Studio 中的 Win32 Console Application 项目

    在 Visual Studio 2022 中创建一个项目,其自动生成的源文件内容包含 #include "stdafx.h" 和使用_tmain 作为入口点,意味着你需要创建一个基 ...

  10. Android 开发入门(2)

    0x04 简单控件 (1)文本显示 a. 添加文本 设置文本内容主要有两种方式: XML:通过属性android:text设置 在 layout 目录下新建 activity_text_view.xm ...