🔥 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() -> String
getAs(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() -> String
postAs(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 = true
System.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);

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
OPPO:AIOS 将经历三个阶段
在 2024 OPPO 开发者大会上,OPPO 方面表示,其自主研发的AI操作系统AIOS将经历三个重要的发展阶段。 第一阶段:系统应用的AI化。OPPO的AIOS首个阶段聚焦于将AI技术融入现有的系统应用中。具体而言,这意味着通过增强现有应用程序之中的功能,来实现更高效的操作,例如引入AI消除功能和AI通话摘要等。这些应用使得用户在处理日常事务时,能够更加便捷地进行信息管理与沟通,实际上,这种应用将会显著提升用户的工作和生活效率。 第二阶段:系统的AI化。在完成基础应用的AI化后,第二阶段将致力于全面重构软件系统。在这一阶段,OPPO希望能够融合模型、算力、数据和服务的生态,以实现更加直观的用户交互和个性化的使用体验。这不仅意味着更流畅的操作界面,也预示着用户能够获得符合自身习惯和需求的智能服务,从而提升整体的用户满意度。 第三阶段:AI即系统。最后,AIOS将迈向一个崭新的高峰,进入第三阶段。在这一阶段,AI将不再是附加的功能,而是系统的核心。OPPO将致力于提升模型的能力与能效,进一步完善生态环境的建设。这一阶段的实现,将意味着用户获得更智能、更人性化的设备体验,真正实现智能化生...
-
下一篇
Ubuntu 25.04 代号揭晓:Plucky Puffin
在 Ubuntu 24.10 发布不久后,Ubuntu 官方揭晓了 Ubuntu 25.04 的代号,为 Plucky Puffin(勇敢的海鹦)。 自 Ubuntu 6.06 LTS 开始,Ubuntu 按照字母排序来给各发行版的代号进行取名,并于 Ubuntu 17.10 从字母 A 开始新的一轮。按照这一规律,轮到 Ubuntu 25.04 正好是以字母 P 开头。 “Plucky Puffin”是 Ubuntu 历史上第 2 个以 P 命名的代号,另一个是 Ubuntu 12.04 LTS “Precise Pangolin”。 OMG! Ubuntu 对这一代号进行了解析:“Plucky”是一个形容词,通常用来指某人/某物在面对挑战或障碍时表现出勇气、决心或信心。在某些情况下,它也是 Gutsy(勇气/胆量)的同义词,后者是 Ubuntu 7.10 “Gutsy Gibbon”代号中使用的形容词。 “海鹦”是一种小型海鸟,其喙色鲜艳,羽毛黑白相间,体形略显矮胖。因此虽然代号中使用的确切单词和动物不再像以前那样与即将发布的版本相关,但其猜测 Ubuntu 25.04 也许会在下...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker容器配置,解决镜像无法拉取问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- Red5直播服务器,属于Java语言的直播服务器