关注我的公众号:【编程朝花夕拾】,可获取首发内容。
01 引言
平时习惯了使用类似Postman测试接口,直接将curl命令复制到工具里就可以自动转化,完成接口调试。如果要将curl直接使用在Java中,这样就免去了OkHttp/RestTemplate工具类的再次翻译,该如何实现呢?
本节介绍一款专门用来将curl集成在Java中,可以 通过Feign接口一样调用的框架:JQuick-Curl。
02 简介
JQuickCurl 是一款面向 Java 的 curl 命令式 HTTP 客户端框架:把浏览器、Postman 或终端中可复用的原生 curl 命令直接解析为 Java 请求,支持注解与 XML 双配置、变量替换、条件渲染、文件传输、批量执行和动态代理调用。
底层用 OkHttp 发请求,用 ANTLR 解析 curl 语法。它不是调用系统的 curl 进程,而是把 curl 命令解析成 Java 原生的 HTTP 调用逻辑。

GitHub地址:github.com/dromara/jqu...
目前 1.1k的stars,已入选 Awesome Java HTTP Clients 精选列表,属于 dromara 开源组织项目。
03 小试牛刀
3.1 Maven依赖
xml
<dependency>
<groupId>io.github.paohaijiao</groupId>
<artifactId>jquick-curl</artifactId>
<version>2.3.0</version>
</dependency>
3.2 注解模式
在使用注解模式之前,先来定义三个接口:

定义curl接口
java
public interface UserService {
@JCurlCommand("curl -X GET 'http://localhost:8080/user?id=${id}'")
User getUser(Long id);
@JCurlCommand("curl -X POST 'http://localhost:8080/update?id=${id}&name=${name}'")
String update(Long id, String name);
/**
* 注意:jquick-curl 的 ${} 占位符替换只做参数 toString(),不会把 POJO 序列化为 JSON。
* 因此这里接收调用方序列化好的 JSON 字符串,否则 -d body 会是 User 的 lombok toString 文本,
* 服务端 @RequestBody 反序列化失败返回 400。
*/
@JCurlCommand("curl -X POST 'http://localhost:8080/register' -H 'Content-Type: application/json' -d '${json}'")
String register(String json);
}
关键注解:@JCurlCommand
占位符:${}
其他就是curl的命令了
测试类
java
public class UserCurlTest {
@Test
void test01() {
UserService proxy = JCurlInvoker.createProxy(UserService.class);
User user = proxy.getUser(1L);
System.out.println(user);
// User(id=1, name=ws, age=27, birthDate=null)
}
@Test
void test02() {
UserService proxy = JCurlInvoker.createProxy(UserService.class);
String ws = proxy.update(2L, "ws");
System.out.println(ws);
// id = 2 的用户ws updated
}
@Test
void test03() {
UserService proxy = JCurlInvoker.createProxy(UserService.class);
User user = new User();
user.setId(RandomUtil.randomLong(100));
user.setName("ws" + user.getId());
user.setAge(RandomUtil.randomInt(50));
String ws = proxy.register(JSONUtil.toJsonStr(user));
System.out.println(ws);
// 注册成功:User(id=69, name=ws69, age=34, birthDate=null)
}
}
调用过程中会打印项目信息:

3.3 XML 配置模式
类似 MyBatis 的 Mapper.xml,把 curl 命令写在 XML 文件里,支持变量替换、条件渲染。适合接口数量多、需要集中管理的项目。
04 同类Forest
我本人自己很少curl的方式开发项目,所以jquick-curl对于自己而言用起来反而非常别扭。使用较多的反而是另一款框架:Forest
Forest 是 dromara 社区的另一个 Java HTTP 客户端框架,比 JQuick-Curl 资历老,生态更成熟。两个框架解决的是同一类问题,但思路不同。
两类框架怎么选呢?取决于团队的使用习惯:
- 团队里 curl 用得溜,前后端测试都能看懂 curl 命令 → JQuick-Curl
- Spring Boot 重度项目,想要 Feign 的体验但不依赖 Spring Cloud → Forest
- 需要把请求定义从代码里抽出来做配置化管理 → JQuick-Curl 的 XML 模式
- 需要
OAuth2、SSE、复杂模板表达式等高级特性 → Forest 更成熟
05 小结
如果你的日常开发中大量涉及第三方 HTTP 接口对接,并且团队里 curl 命令是通用的调试语言,JQuick-Curl 值得一试。它不替代 Forest,也不替代 OkHttp,它只是给了你另一种选择:用最熟悉的方式描述请求,剩下的交给框架。
感兴趣的老铁可以深入了解一下!