hutool优雅实现发送请求以及响应解析

简介: 平常的开发中经常会遇到调用三方接口的需求,实现方法可以说五花八门,考虑项目规范以及便于维护,

背景


   平常的开发中经常会遇到调用三方接口的需求,实现方法可以说五花八门,考虑项目规范以及便于维护,最好使用统一的请求发送工具,hutool中的HttpUtil就是一个不错的选择.对常见的get、post请求都已经进行了完整封装。下面结合具体的业务请求说一下如何使用,看一下请求发送是否够香够顺滑!

   首先贴一下hutool的官方依赖以及官方文档:

<dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.2.4</version>
            </dependency>

官方文档地址:hutool官方链接


get请求


   微信公众平台中的接口基本上都需要权限认证,接口中都需要传递access_token,所以获取access_token就是第一步操作.下面官方给出的获取方式:

0dd83c329439a61d7418f53a982297aa_70b540fe68d34828895768391e464cfb.png

好,下面就说明如何发送请求以及如何进行解析:

   使用到的请求方式:HttpUtil.get("请求链接")

   字符串拼接方式:StrUtil.format("拼接字符串模板", "参数1", "参数2");写法要比直接用+拼接更加优雅,另外日志打印也可以使用此方式!

   响应参数解析方式:

JSONObject resultJsonObject = JSONUtil.parseObj("响应信息");
String "响应信息values"= responseJsonObject.getStr("响应信息key");


业务实现:

// 获取微信公众平台的accessToken
 public String getWxgAccessToken() {
        String appid="公众号appid信息";
        String wxgSecret="公众号秘钥信息";
        // 拼接请求链接
        String requestUrl = StrUtil.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}", appid, wxgSecret);
        // 发送请求
        String returnMsg = HttpUtil.get(requestUrl);
        JSONObject responseJsonObject = JSONUtil.parseObj(returnMsg);
        if(ObjectUtil.isNull(responseJsonObject)) throw new Exception("响应异常:获取信息为空!");
        String accessToken = responseJsonObject.getStr("access_token");
        return accessToken;
    }


Post请求


   微信公众号中的服务号是支持给用户发送消息信息,现在有消息发送接口,官方文档如下:

2ddee71de948789f4f80ade287e52901_de3c83dae45648878c0e331adc4e0c8d.png


   此需求中要求发送post请求,请求参数上要有access_token,其余请求信息放到请求体中,具体的实现方式如下(偷懒直接把官方组装的格式复制了一下):

// 发送模板消息
    public void sendWxgTemplateMessage() {
        // 组装消息内容
        String touser="";  // 接收者openId
        String templateId=""; // 模板id
        String url="";       // 跳转路径(小程序之外)
        String appid="";  // 小程序appid
        String pagepath="";  // 小程序跳转路径
        String client_msg_id="";  // 防重入id
        String first="岗位申请成功!";  // 副标题
        String keyword1="";  // 关键词1
        String remark="祝你面试成功!";  // 备注
        String value="销售精英";  // 信息
        String color="";  // 颜色
        String messageStr="{\n" +
                "           \"touser\":"+touser+",\n" +
                "           \"template_id\":"+templateId+",\n" +
                "           \"url\":"+url+",  \n" +
                "           \"miniprogram\":{\n" +
                "             \"appid\":"+appid+",\n" +
                "             \"pagepath\":"+pagepath+"\n" +
                "           },\n" +
                "           \"client_msg_id\":\"MSG_000001\",\n" +
                "           \"data\":{\n" +
                "                   \"first\": {\n" +
                "                       \"value\":"+first+",\n" +
                "                       \"color\":\"#173177\"\n" +
                "                   },\n" +
                "                   \"keyword1\":{\n" +
                "                       \"value\":"+value+",\n" +
                "                       \"color\":\"#173177\"\n" +
                "                   },\n" +
                "                   \"keyword2\": {\n" +
                "                       \"value\":\"39.8元\",\n" +
                "                       \"color\":\"#173177\"\n" +
                "                   },\n" +
                "                   \"keyword3\": {\n" +
                "                       \"value\":\"2014年9月22日\",\n" +
                "                       \"color\":\"#173177\"\n" +
                "                   },\n" +
                "                   \"remark\":{\n" +
                "                       \"value\":"+remark+",\n" +
                "                       \"color\":\"#173177\"\n" +
                "                   }\n" +
                "           }\n" +
                "       }";
        // 发送消息
        String accessToken="accessToken";
        // 发送请求
        String returnMsg = HttpUtil.post(StrUtil.format("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={}", accessToken), messageStr);
        // 请求参数解析
        JSONObject jsonObject = JSONUtil.parseObj(returnMsg);
        // 获取errmsg,判断消息发送是否成功
        String errmsg = jsonObject.getStr("errmsg");
        if(!StrUtil.equals("ok",errmsg)) throw new Exception("消息发送失败!");
    }


   以上是常见请求hutool的调用方式,平常项目开发中如果没有特殊要求还是使用封装好的工具类最好,可以避免重复"造轮子",也便于项目维护.看到这里如果对你有帮助,欢迎点赞或评论!


相关文章
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
540 9
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
272 57
|
9月前
|
XML JSON JavaScript
HttpGet 请求的响应处理:获取和解析数据
HttpGet 请求的响应处理:获取和解析数据
|
10月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
939 2
|
11月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
734 0
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
614 0
|
6月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
632 29
|
6月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
184 4

推荐镜像

更多
  • DNS