SpringBoot-Http请求工具类
一、编写请求配置类
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请求工具类的更多相关文章
- WebUtils-网络请求工具类
网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- HTTP请求工具类
HTTP请求工具类,适用于微信服务器请求,可以自测 代码; /// <summary> /// HTTP请求工具类 /// </summary> public class Ht ...
- 实现一个简单的http请求工具类
OC自带的http请求用起来不直观,asihttprequest库又太大了,依赖也多,下面实现一个简单的http请求工具类 四个文件源码大致如下,还有优化空间 MYHttpRequest.h(类定义, ...
- 远程Get,Post请求工具类
1.远程请求工具类 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...
- C#实现的UDP收发请求工具类实例
本文实例讲述了C#实现的UDP收发请求工具类.分享给大家供大家参考,具体如下: 初始化: ListeningPort = int.Parse(ConfigurationManager.AppSetti ...
- ajax请求工具类
ajax的get和post请求工具类: /** * 公共方法类 * * 使用 变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...
- 【原创】标准HTTP请求工具类
以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...
随机推荐
- Redis redis-cli 你需要知道这些有用的命令
一.--stat 输出当前 redis 服务节点状态 命令:redis-cli -h host -p port --stat 输出: 连续输出,默认interval 1s 键数 | 内存 | 客户端数 ...
- 使用OpenMP与AVX优化矩阵乘法
使用OpenMP与AVX优化矩阵乘法 由于课设内容做的太过简(mo)单(yu),于是在去年12月初的时候就计划写三篇博客随笔作为实验报告,前两篇简单介绍了OpenMP和SIMD指令进行铺垫,本篇将会介 ...
- JVM—对象的创建流程与内存分配
JVM-对象的创建流程与内存分配 创建流程 对象创建的流程图如下: 对象的内存分配方式 内存分配的方式有两种: 指针碰撞(Bump the Pointer) 空闲列表(Free List) 分配方式 ...
- HMS Core机器学习服务身份证识别功能,实现信息高效录入
在各类App都要进行实名制的当下,进行身份认证自然不可避免.平时购买火车票.飞机票,住酒店.打游戏等都需要身份认证,如果每次都要输入那18位的身份证号十分麻烦,手一抖就会出错.因此,使用华为机器服务身 ...
- 【实变函数】四、Lebesgue积分
[实变函数]4. Lebesgue积分 本文介绍Lebesgue积分的定义,并给出积分的一些常用性质.注意Lebesgue积分的定义是从非负函数向一般函数扩展的,这依托于一般函数的分解\(f(x)=f ...
- 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理.化学和生物系统的基石.ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力.重点 ...
- 打造HarmonyOS智能全场景,7大BUFF为您助力!
<HarmonyOS Connect系列课>上线,7套课程教会开发者打造智能全场景: <HarmonyOS Connect系列课>共含7套课程,按照业务流程先后分别为--Dev ...
- Deep Learning on Graphs: A Survey第五章自动编码论文总结
论文地址:https://arxiv.org/pdf/1812.04202.pdf 最近老师让我们读的一片论文,已经开组会讲完了,我负责的是第五章,图的自动编码,现在再总结一遍,便于后者研读.因为这篇 ...
- 国庆集训 Day1 复盘笔记
9.25 \({\color{Green} \mathrm{A\ -\ Powered\ Addition}}\) 只要把序列扫一遍,然后求出目前最大值与当前值的差的最大值 \(x\),再 \(log ...
- 毕业两年升主管,自沉稳而后顾人 对话阿里云MVP陈琦
所有伟大都源于一个勇敢的开始 我跟可视化结缘是一个巧合,一开始并没有很笃定要做这个方向.2015年可视化的市场还不繁荣,我在创业公司实习,跟领导层一起参加各种创业大赛路演,当时我做的主要工作就是和领导 ...