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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 平常的开发中经常会遇到调用三方接口的需求,实现方法可以说五花八门,考虑项目规范以及便于维护,

背景


   平常的开发中经常会遇到调用三方接口的需求,实现方法可以说五花八门,考虑项目规范以及便于维护,最好使用统一的请求发送工具,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的调用方式,平常项目开发中如果没有特殊要求还是使用封装好的工具类最好,可以避免重复"造轮子",也便于项目维护.看到这里如果对你有帮助,欢迎点赞或评论!


相关文章
|
4月前
|
Shell
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
1月前
|
XML JSON JavaScript
HttpGet 请求的响应处理:获取和解析数据
HttpGet 请求的响应处理:获取和解析数据
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
185 2
|
4月前
|
传感器 C# Android开发
深度解析Uno Platform中的事件处理机制与交互设计艺术:从理论到实践的全方位指南,助您构建响应迅速、交互流畅的跨平台应用
Uno Platform 是一款开源框架,支持使用 C# 和 XAML 开发跨平台原生 UI 应用,兼容 Windows、iOS、Android 及 WebAssembly。本文将介绍 Uno Platform 中高效的事件处理方法,并通过示例代码展示交互设计的核心原则与实践技巧,帮助提升应用的用户体验。事件处理让应用能响应用户输入,如点击、触摸及传感器数据变化。通过 XAML 或 C# 添加事件处理器,可确保及时反馈用户操作。示例代码展示了一个按钮点击事件处理过程。此外,还可运用动画和过渡效果进一步增强应用交互性。
162 57
|
3月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
239 0
|
4月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
261 0
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
108 2
|
26天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

热门文章

最新文章

推荐镜像

更多