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


相关文章
|
1月前
|
JSON 数据格式
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
26 0
|
28天前
|
安全 JavaScript 前端开发
若依实现单点登录(解析请求链接中的参数做鉴权认证)
若依实现单点登录(解析请求链接中的参数做鉴权认证)
17 0
|
1月前
|
JSON JavaScript 前端开发
如何在Python中解析JSON响应?
【2月更文挑战第26天】【2月更文挑战第92篇】如何在Python中解析JSON响应?
|
3月前
|
存储 前端开发 Java
Springboot使用参数解析器HandlerMethodArgumentResolver,解析请求头里的数据
HandlerMethodArgumentResolver 是 Spring MVC 中的一个接口,它允许你自定义方法参数的解析过程。当处理请求时,Spring MVC 需要将请求中的信息映射到控制器方法的参数上,而 HandlerMethodArgumentResolver 允许你在这个过程中进行自定义操作。
|
3月前
|
JSON 前端开发 Java
深入解析SpringBoot的请求响应机制
深入解析SpringBoot的请求响应机制
|
3月前
|
IDE 测试技术 开发工具
FastAPI 并发请求解析:提高性能的重要特性
在当今的数字化世界中,网络用户对于高速响应和持续连接的诉求日益显著。这促使了基于 Python 构建的 FastAPI 框架受到广泛关注,它不仅现代化且效率极高,而且简化了并行请求的处理。本篇文章旨在探讨 FastAPI 如何处理这类请求,并对应用实例进行实际编码展示。
|
3月前
|
移动开发 自然语言处理 网络协议
Http解析实现/服务器Get请求的实现
Http解析实现/服务器Get请求的实现
46 0

推荐镜像

更多