HttpUtils 详解
一、详解
1.1 介绍
现如今的 Web 项目,由服务端向外发起网络请求的场景,基本上随处可见!
传统情况下,在服务端代码里访问 http 服务时,一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不过这种方法使用起来太过繁琐,而且 api 使用起来非常的复杂,还得操心资源回收。
1.2 什么是 HttpUtils?
- HttpUtils 是 Solon 提供的进行远程调用客户端
- HttpUtils 提供了很多远程调用的方法,能够大大提高客户端的编写效率。 HttpUtils 接口实现了 HttpURLConnection 的适配(默认),以及 OkHttp 的适配。
- 官网地址: solon-net-httputils
1.3 引入依赖
<dependency><groupId>org.noear</groupId><artifactId>solon-net-httputils</artifactId>
</dependency>
HttpUtils 不需要初始化,即可直接使用。而且,可以直接使用负载均衡的能力(需要引入 solon-cloud 的插件,提供底层支持)。像这样:
HttpUtils.http("user-service", "/user/get?id=1").get();
二、接口使用
HttpUtils 最大的特色就是对各种网络请求方式做了包装,能极大的简化开发人员的工作量,下面我们以 GET、POST、PUT、DELETE、文件上传与下载为例,分别介绍各个API的使用方式。
2.1 GET 请求
通过 HttpUtils 发送 HTTP GET 协议请求,经常使用到的方法有两个:
get() -> StringgetAs(Type type) -> T(支持泛型)
在 Solon 环境下写一个单元测试用例,首先创建一个 Api 接口,然后编写单元测试进行服务测试。
不带参的get请求
@Controller
public class TestController {@Get@Mapping("testGet")public Result testGet(){Result result = new Result();result.setCode("200");result.setMsg("demo...");return result;}
}@Data
public class Result {private String code;private String msg;
}
单元测试(不带参的get请求)
@Test
public void testGet(){//请求地址String url = "http://localhost:8080/testGet";//发起请求,直接返回对象Result result = HttpUtils.http(url).getAs(Result.class);System.out.println(result.toString());
带参的get请求(使用占位符号传参)
@Controller
public class TestController {@Get@Mapping("testGetByRestFul/{id}/{name}")public Result testGetByRestFul(@Path("id") String id, @Path("name") String name){Result result = new Result();result.setCode("200");result.setMsg("demo...");return result;}
}
单元测试(带参的get请求),顺带加了个 header 信息。
@Test
public void testGetByRestFul(){//请求地址String url = "http://localhost:8080/testGetByRestFul/001/张三";//发起请求,直接返回对象(restful风格)Result result = HttpUtils.http(url).header("App-Id","1").getAs(Result.class);System.out.println(result.toString());
}
2.2 POST 请求
其实 POST 请求方法和 GET 请求方法上大同小异,HttpUtils 的 POST 请求也包含两个主要方法:
post() -> StringpostAs(Type type) -> T(支持泛型)
模拟表单请求,post方法测试
@Controller
public class TestController {@Post@Mapping("testPostByForm")public Result testPostByForm(String userName, String userPwd){Result result = new Result();result.setCode("200");result.setMsg("Demo...");return result;}
}
x-www-form-urlencoded post
@Test
public void testPostByForm(){//请求地址String url = "http://localhost:8080/testPostByForm";//发起请求Result result = HttpUtils.http(url).data("userName", "唐三藏").data("userPwd", "123456").postAs(Result.class);System.out.println(result.toString());
}
form-data post,顺带加上文件上传
@Test
public void testPostByForm(){//请求地址String url = "http://localhost:8080/testPostByForm";//发起请求Result result = HttpUtils.http(url).data("userName", "唐三藏").data("userPwd", "123456").data("file", "logo.jpg", new File("/data/logo.jpg")) .postAs(Result.class, true); //useMultipart = trueSystem.out.println(result.toString());
}
json-body post
@Test
public void testPostByForm(){//请求地址String url = "http://localhost:8080/testPostByForm";//发起请求Result result = HttpUtils.http(url).bodyOfJson("{\"userName\":\"唐三藏\",\"userPwd\":\"123456\"}").postAs(Result.class); System.out.println(result.toString());
}
bean-body post
@Test
public void testPostByForm(){//请求地址String url = "http://localhost:8080/testPostByForm";UserBean user = new UserBean();user.setUserName("唐三藏");user.setUserPwd("123456")//发起请求Result result = HttpUtils.http(url).bodyOfBean(user).postAs(Result.class); System.out.println(result.toString());
}
2.3 PUT、PATCH、DELETE 请求
用法与 POST 完全相同。
2.4 高级用法
获取响应(用完要关闭)
try(HttpResponse resp = HttpUtils.http("http://localhost:8080/hello").data("name","world").exec("POST")) {int code = resp.code();String head = resp.header("Demo-Header");String body = resp.bodyAsString();
}
配置序列化器。默认为 json,改为 fury;或者自己定义。
FuryBytesSerializer serializer = new FuryBytesSerializer();Result body = HttpUtils.http("http://localhost:8080/book").serializer(serializer).bodyOfBean(book).postAs(Result.class);
相关文章:
HttpUtils 详解
一、详解 1.1 介绍 现如今的 Web 项目,由服务端向外发起网络请求的场景,基本上随处可见! 传统情况下,在服务端代码里访问 http 服务时,一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不…...
云计算第四阶段: cloud二周目 07-08
cloud 07 一、k8s服务管理 创建服务 # 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim websvc.yaml --- kind: Service apiVersion: v1 metadata:name: websvc spec:type: ClusterIPselector…...
智能合约开发工具Remix
不久前,我在B站、视频号和 YouTube 都陆续发布了新的一套免费视频课程《智能合约开发工具Remix》,总共分为了 9 个小节的视频,以下分别是这 9 个小节在 B 站的视频链接,喜欢直接看视频的伙伴可以去 B 站观看: 概况文件…...
YYF桌面 1.2 | 个性化桌面体验,清爽美观。
YYF桌面是一款经过定制的安卓桌面启动器,此版本基于1.2版本进行了一系列个性化修改。主界面快捷图标进行了美化处理,并采用了清爽半透明的图标背景。取消了底部快捷键,并重新制作了“全部应用”按钮,保留了动态效果。修改了右上角…...
【人工智能/计算机工程/大数据】第五届人工智能与计算工程国际学术会议(ICAICE 2024,2024年11月8-10日)
The 5th International Conference on Artificial Intelligence and Computer Engineering 第五届人工智能与计算工程国际学术会议(ICAICE 2024) 会议官网:www.event-icaice.org The 5th International Conference on Artificial Intellige…...
uni-app录音功能
纯纯干货,cv即用 <template><!-- 录音页面 --><view class"page"><view class"tape_box"><view class"upload_box1"><view class"upload_top"><view class"upload_img_title…...
C语言【调试】(个人笔记版)
调试 前言一、Bug二、调试工具1.DeBug2.Release 三、调试快捷键1、断点 四、调试时查看程序的当前信息1、查看临时变量2、查看内存3、查看调用堆栈、汇编、寄存器 总结 前言 这篇文章大都是我的个人笔记: 调试在日常程序设计中是很重要的。调试说白了就是为了解决代…...
连锁收银系统
商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理,它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…...
5.2024.10.21
2024.10.21 学习和复习 学习QT的流程控制、函数、内联函数复习C语言printf练习 问题及解决方案 C学到函数之后有些吃力代码逻辑能力不大行,需要巩固一下C语言基础再挤多点时间去学习嵌入式写代码前先把大概思路写出来 碎碎念 最近作业比较多,有点静不下…...
前端Socket互动小游戏开发体验分享
随着实时网络通信技术的不断发展,基于WebSocket的前端互动小游戏成为了一种非常流行的选择。WebSocket允许客户端和服务器之间进行双向通信,为游戏互动带来了更快的响应时间和更流畅的体验。本文将通过一个简单的互动小游戏来探讨前端如何利用WebSocket技…...
react项目,通过自定义 separator 属性来修改日期选择器中间的分隔符:
1. 引入必要的依赖 确保你已经引入了 DatePicker 组件和 moment 库。 import React, { Component } from react; import { DatePicker } from antd; import moment from moment; const { RangePicker } DatePicker; const dateFormat "YYYY/MM/DD"; 2. 定义父组…...
双十一有啥好用的家居好物推荐?2024性价比高的超声波清洗机推荐
双十一今天晚上就可以越热开抢了,还不知道购买什么物品的小伙伴们赶紧来看看我这篇文章,在众多家居好物中,超声波清洗机以其高效、便捷的特点,成为了许多家庭的必备神器。2024年,市场上涌现出了不少性价比超高的产品&a…...
比亚迪车机安装第三方应用教程
比亚迪车机安装第三方应用教程 比亚迪车机U盘安装APP, 无论是dlink3.0还是4.0都是安卓系统,因此理论上安卓应用是都可以安装的,主要就是横屏和竖屏的区别。在比亚迪上安装软件我主要推荐两种方法。 第一种,直接从电脑端下载安装布…...
移动零---双指针法
目录 一:题目 二:算法原理讲解 三:代码编写 一:题目 题目链接:https://leetcode.cn/problems/move-zeroes/description/ 二:算法原理讲解 三:代码编写 void moveZeroes2(vector<int>& nums) {for (int d…...
MoeCTF 2024 ---Misc方向WP
安全杂项 signin 题目描述: xdsec的小伙伴们和参赛者来上课,碰巧这一天签到系统坏了,作为老师的你,要帮他们 教师代签。 特殊提醒:luo同学今天好像在宿舍打游戏,不想来上课,这是严重的缺勤行为…...
【我的 RT 学习手札】信息收集
相关笔记整理自B站up主泷羽sec全栈渗透测试教学(免费) 视频链接为泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 笔记只是方便师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线࿰…...
CMake变量:CMAKE_FIND_LIBRARY_SUFFIXES
CMAKE_FIND_LIBRARY_SUFFIXES是CMake中的一个变量,用于指定在查找库文件时使用的后缀列表。当CMake需要找到库文件时,它会尝试在这些后缀后添加库名来构建库文件的完整路径。例如,如果库名为mylib,并且CMAKE_FIND_LIBRARY_SUFFIXE…...
在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例
在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例。这样做可以简化基础设施管理,同时允许不同的 Celery 应用之间进行消息传递和协作。下面是如何配置多个 Celery 实例以使用同一个 RabbitM…...
ARM在嵌入式开发中的作用有哪些?
ARM在嵌入式开发中的作用主要体现在以下几个方面: 架构优势: ARM架构基于RISC(精简指令集计算机),具有精简而高效的指令集,适合资源受限的环境。低功耗设计使得ARM处理器在移动设备和嵌入式系统中非常受欢…...
-webkit-box-orient属性丢失?
在实际项目场景当中,我们经常会遇到需要对超长文本溢出省略的场景: 我们经常会这样写—— 单行省略: overflow: hidden; //文本溢出隐藏text-overflow: ellipsis; //文本溢出显示省略号white-space: nowrap; //不换行 多行省略:…...
对比直接使用厂商API体验Taotoken在路由与容灾上的差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在路由与容灾上的差异 1. 引言:一次意料之外的服务波动 在日常开发与业务运营中&…...
告别DETR训练慢!手把手教你用Deformable Attention加速目标检测模型收敛
突破DETR训练瓶颈:Deformable Attention加速目标检测实战指南 当你在深夜盯着屏幕,看着DETR模型训练到第50个epoch时验证集指标仍在波动,是否曾怀疑自己的显卡在空转?Transformer架构在目标检测领域的革命性突破有目共睹ÿ…...
告别‘屎山’代码:手把手教你阅读和复用《饥荒》官方Lua源码来开发Mod
从《饥荒》源码到高效Mod开发:解锁官方Lua代码的实战指南 当你在深夜调试第37个宠物AI的bug时,是否想过游戏开发者早已为你准备好了完美解决方案?《饥荒》的官方Lua源码就像一座未被充分发掘的金矿,里面藏着Klei工程师们精心设计的…...
DxO PureRAW中文破解版
🔥RAW图像降噪神器!DxO PureRAW中文破解版来了!🚀哈喽,各位摄影老铁们好呀!👋👋 今天给大家安利一款超级硬核的RAW图像处理工具—— ✨ DxO PureRAW ✨ 这可是 DxO Labs 旗下的行业领…...
NotebookLM权限审计日志难追溯?手把手教你启用VPC Service Controls + Cloud Logging Query Builder构建实时越权预警看板
更多请点击: https://intelliparadigm.com 第一章:NotebookLM权限控制设置 NotebookLM 是 Google 推出的基于用户上传文档进行 AI 辅助理解与生成的实验性工具,其权限模型默认采用 Google 账户体系集成,但需主动配置以满足团队协…...
一行环境变量,给 Claude Code 省下 90% 成本
一行环境变量,给 Claude Code 省下 90% 成本 你以为是模型太贵,其实是缓存“漏风”了 🧊💸最近不少开发者发现一个诡异现象: 用了 Claude Code 接国内模型,比如 DeepSeek、Kimi、智谱 AI 后,突然…...
基于ESP8266与TFT屏的桌面智能天气站DIY全攻略
1. 项目概述:打造一个桌面级的智能天气信息中心 几年前,当我第一次把玩ESP8266这块小芯片时,就被它“麻雀虽小,五脏俱全”的特性震撼了——一个比硬币大不了多少的模块,竟然内置了完整的Wi-Fi协议栈和可编程的微控制器…...
高通机器人RB5平台:从RAM转储分析到安全启动的实战配置指南
1. 高通RB5平台RAM转储分析实战 第一次拿到高通RB5开发板时,遇到系统崩溃完全不知道从何下手。后来发现RAM转储分析就像给机器人做"脑部CT",能完整记录崩溃瞬间的系统状态。这里分享我摸索出来的完整操作流程。 1.1 环境准备与工具链配置 工欲…...
【NotebookLM知识图谱构建权威白皮书】:基于127个企业POC验证的4层语义对齐框架
更多请点击: https://intelliparadigm.com 第一章:NotebookLM知识图谱构建概览 NotebookLM 是 Google 推出的面向研究者与开发者、基于用户自有文档构建可推理知识体的 AI 工具。其核心能力并非依赖通用语料,而是围绕上传文档(PD…...
【免费下载】 MATLAB从入门到精通教程 - PDF文档下载指南【matlab下载】
MATLAB从入门到精通教程 - PDF文档下载指南 欢迎来到《MATLAB从入门到精通教程》的资源页面!本资源旨在为所有想要深入学习MATLAB编程语言的学者和工程师提供一份详尽、全面的学习资料。这份权威的PDF文档是英文版,非常适合希望掌握MATLAB核心功能及高级…...
