还在手动把 Postman 和浏览器的 curl 转成 Java 代码?这个框架让你一键粘贴直接用

从浏览器 DevTools 或 Postman 复制的 curl 命令,原封不动粘贴进代码就能跑。

零翻译、零拆解、零手工拼装,效率提升 5-8 倍。

一、你的日常是不是这样的?

场景 1:从浏览器 DevTools 复制 curl

你在浏览器里调试一个接口,F12 打开 Network,右键 -> Copy as cURL,

拿到了一段完整的 curl 命令。然后呢?你盯着这段命令,开始手工翻译:

curl 'api.example.com/users' \

-H 'Content-Type: application/json' \

-H 'Authorization: Bearer eyJhbGc...' \

--data-raw '{"name":"John","page":1}'

翻译成 Java 代码变成这样:

java 复制代码
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Bearer eyJhbGc...");
    String body = "{\"name\":\"John\",\"page\":1}";
    HttpEntity<String> entity = new HttpEntity<>(body, headers);
    ResponseEntity<String> response = restTemplate.exchange(
        "https://api.example.com/users",
        HttpMethod.POST,
        entity,
        String.class
    );

// 还要手动解析 response...

一个接口三五分钟,十个接口一下午。改个参数还得重来。

场景 2:从 Postman 导出 curl

Postman 里调通了接口,点 Code -> cURL,复制出来。然后还是一样的流程:

人肉拆解 URL、headers、body,拼成 Java 代码。你有没有想过:curl 命令已经是完整的请求描述了,为什么还要翻译一遍?

二、JQuickCurl:粘贴即用,零翻译

JQuickCurl 做的事情很简单:直接把 curl 命令当作 API 定义。浏览器复制的 curl,原封不动贴进注解里,就能跑。

java 复制代码
    public interface ApiService {

        // 从浏览器复制的 curl,直接粘贴
        @JCurlCommand("curl 'https://api.example.com/users' \n" +
            "-H 'Content-Type: application/json' \n" +
            "-H 'Authorization: Bearer ${token}' \n" +
            "--data-raw '{\"name\":\"John\",\"page\":1}'")
        String getUsers(JQuickCurlReq req);
    }

调用:

java 复制代码
    ApiService api = JCurlInvoker.createProxy(ApiService.class);
    JQuickCurlReq req = new JQuickCurlReq();
    req.put("token", "eyJhbGc...");
    String result = api.getUsers(req);

完毕。没有手动拆 headers,没有手动拼 body,没有手动解析响应。

从复制到跑通,30 秒。

三、效率对比:传统方式 vs JQuickCurl

以一个需要对接 10 个第三方接口的任务为例:

【传统方式(RestTemplate / OkHttp 手写)】

  • 拆解 curl 参数 ~1 分钟
  • 构建 HttpHeaders ~1 分钟
  • 拼装请求体 ~1-2 分钟
  • 执行请求 ~1 分钟
  • 解析响应 ~1-2 分钟
  • 调试验证 ~1 分钟

10 个接口总耗时 50-80 分钟

【JQuickCurl 方式】

  • 从浏览器/Postman 复制 curl ~5 秒

  • 粘贴到 @JCurlCommand 注解 ~10 秒

  • 定义返回类型 ~10 秒

  • 调试验证 ~15-30 秒

10 个接口总耗时 5-10 分钟

效率提升:5-8 倍 更重要的是:不容易出错。传统方式手工拆解参数,少一个 header、多一个引号都是 bug。JQuickCurl 直接用原始 curl,浏览器里能跑通的,代码里就能跑通。

四、三种复制场景,全部支持

场景 1:Chrome DevTools -> Copy as cURL

在 Network 面板右键请求 -> Copy -> Copy as cURL,粘贴即用:

java 复制代码
    @JCurlCommand("curl 'https://api.github.com/user' \n" +
        "-H 'accept: application/json' \n" +
        "-H 'authorization: Bearer ${token}'")
    JGithubAuth getUser(JQuickCurlReq req);

场景 2:Postman -> Code -> cURL

在 Postman 中点击 Code 按钮,选择 cURL,复制,粘贴即用:

java 复制代码
    @JCurlCommand("curl --location 'http://localhost:8080/api/users/create' \n" +
        "-H 'Content-Type: application/json' \n" +
        "-d '{\"name\":#{name},\"email\":#{email}}'")
    JUser createUser(@Param("name") String name,@Param("email") String email);

场景 3:API 文档里的 curl 示例

大部分 API 文档(Stripe、GitHub、微信开放平台等)都提供 curl 示例,

直接复制粘贴:

java 复制代码
    @JCurlCommand("curl -X GET https://api.stripe.com/v1/customers \n" +
        "-u ${sk_key}:")
    String listCustomers(JQuickCurlReq req);

五、动态参数:复制之后还能改

粘贴的 curl 不一定全是静态的。JQuickCurl 支持两种变量替换:

${变量}:运行时从 JQuickCurlReq 赋值

适合 token、域名等动态配置:

java 复制代码
    // curl 里的 ${token} 运行时替换
    @JCurlCommand("curl -H 'Authorization: Bearer ${token}' https://api.example.com/user")
    JUser getUser(JQuickCurlReq req);

    // 调用时赋值
    req.put("token", "Bearer xxx");

#{变量}:绑定方法参数

适合业务参数直接传递:

java 复制代码
    // curl 里的 #{name} 绑定到方法参数
    @JCurlCommand("curl -X POST ... -d '{\"name\":#{name}}'")
    JUser create(@Param("name") String name);
    // 调用时直接传参
    api.create("张三");

复制粘贴的 curl + 动态参数替换 = 既有文档级的清晰度,又有代码级的灵活性。

六、XML 配置方式:接口多了也能管

当项目里接口越来越多,全部写在注解里会显得拥挤。JQuickCurl 和 MyBatis 一样,

支持把 curl 命令统一放到 XML 文件里管理。

接口定义和 curl 命令分离,改接口不用动代码,改 curl 不用重新编译。

1. 在 resources 目录下创建 apis.xml:

xml 复制代码
 <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE curls PUBLIC "-//PAOHAIJIAO//DTD API CURL 1.0//EN"
            "classpath:paohaijiao/dtd/Jquick-curl.dtd">

    <curls namespace="com.github.paohaijiao.test.xml.UserApi">

        <!-- 从浏览器复制的 curl,直接粘贴到 <curl> 标签里 -->
        <curl name="getUserById"
              returnClass="com.github.paohaijiao.test.model.JUser">
            curl -X GET http://localhost:8080/api/users/1
        </curl>

        <!-- 支持动态参数 #{name} -->
        <curl name="createUser"
              returnClass="com.github.paohaijiao.test.model.JUser">
            curl -X POST http://localhost:8080/api/users/createUser \
            -H "Content-Type: application/json" \
            -d '{"name":#{name},"email":#{email}}'
        </curl>

        <!-- 支持全局变量 ${token} -->
        <curl name="getUser"
              returnClass="com.github.paohaijiao.model.JResult">
            curl -X GET https://api.example.com/user \
            -H "Authorization: Bearer ${token}"
        </curl>

        <!-- 文件上传也能写 -->
        <curl name="upload" returnClass="java.lang.String">
            curl -X POST http://localhost:8080/api/users/upload \
            -F "file=@D:\test\test.txt"
        </curl>

        <!-- 文件下载 -->
        <curl name="download" returnClass="byte[]">
            curl -X GET http://localhost:8080/api/users/download/test.txt \
            --output 'd://test//download.txt'
        </curl>
    </curls>

2. Java 接口只写方法签名,干净利落:

java 复制代码
    public interface UserApi {
        JUser getUserById(JQuickCurlReq req);
        
        JUser createUser(@Param("name") String name,  @Param("email") String email);
        
        JResult getUser(JQuickCurlReq req);
        
        String upload(JQuickCurlReq req);
        
        byte[] download(JQuickCurlReq req);
    }

3. 通过工厂加载 XML,创建代理:

java 复制代码
    JQuickParseHandler parser = new JQuickCurlXmlParseFactory();
    JQuickFactory factory = new JQuickXmlFactory(parser, "apis.xml");
    UserApi userApi = factory.createApi(UserApi.class);

    // 调用
    JQuickCurlReq req = new JQuickCurlReq();
    req.put("token", "Bearer xxx");
    JUser user = userApi.getUserById(req);

XML 配置方式的好处:

  1. 集中管理 curl 命令统一放在 XML 里,一目了然
  2. 代码干净 接口代码只有方法签名,没有注解噪音
  3. 免编译 修改 curl 不需要重新编译 Java 代码
  4. 零学习成本 和 MyBatis Mapper XML 用法完全一致
  5. 粘贴即用 同样支持从浏览器/Postman 复制的 curl

工作流升级版:

浏览器复制 curl -> 粘贴到 XML 的 标签 -> 定义接口方法 -> 调用连注解都不用写,直接粘到 XML 里就行。

七、完整工作流:从调试到上线

  • Step 1 浏览器/Postman 调试接口,确认参数正确
  • Step 2 复制 curl 命令
  • Step 3 粘贴到 @JCurlCommand 注解 或 XML 标签
  • Step 4 定义返回类型,创建代理,调用
  • Step 5 上线
java 复制代码
    public interface OrderApi {
        @JCurlCommand("curl -X POST http://order-service/api/orders \n" +
            "-H 'Content-Type: application/json' \n" +
            "-H 'Authorization: Bearer ${token}' \n" +
            "-d '{\"productId\":#{productId},\"quantity\":#{qty}}'")
        JOrder createOrder(@Param("productId") String productId,@Param("qty") int qty);
    }
java 复制代码
    OrderApi api = JCurlInvoker.createProxy(OrderApi.class);
    JOrder order = api.createOrder("P001", 5);

从调试到上线,curl 命令一个字都没改。浏览器里跑通的,生产环境一样跑通。

八、还支持这些 curl 特性

从浏览器和 Postman 复制的 curl 通常包含各种选项,JQuickCurl 全部支持:

-H / --header 请求头(Content-Type、Authorization 等)

-d / --data POST 请求体

--data-raw 原始请求体(不解析 @)

--data-urlencode URL 编码的表单数据

-X / --request 指定 HTTP 方法

-u / --user 基础认证(用户名:密码)

-F / --form 文件上传(multipart/form-data)

-o / --output 文件下载

-L / --location 跟随重定向

--max-redirs 最大重定向次数

-x / --proxy HTTP/HTTPS 代理

--socks5-hostname SOCKS5 代理

--http2 HTTP/2 协议

-k / --insecure 跳过 SSL 证书校验

-I 仅获取响应头(HEAD 请求)

也就是说:你在浏览器里复制出来的 curl 是什么样,贴进去就是什么样。不用删选项,不用改格式,不用做任何适配。

九、谁适合用?

    • 后端开发者 对接第三方 API,频繁从文档/Postman 复制 curl
    • 爬虫工程师 浏览器里调通请求,直接粘贴成代码
    • 测试工程师 把 Postman 调试通过的 curl 快速转成可执行代码
    • 微服务团队 服务间调用用 curl 风格定义,统一管理
    • 金融支付团队 对接支付网关,curl 命令直接来自银行/支付平台文档

十、快速开始

Step 1:添加 Maven 依赖

xml 复制代码
    <dependency>
        <groupId>io.github.paohaijiao</groupId>
        <artifactId>jquick-curl</artifactId>
        <version>${latest.version}</version>
    </dependency>

Step 2:从浏览器复制 curl,粘贴到注解

java 复制代码
    public interface GithubApi {
        @JCurlCommand("curl -u ${user}:${token} https://api.github.com/user -X GET")
        JGithubAuth getUser(JQuickCurlReq req);
    }

Step 3:创建代理,调用

java 复制代码
    GithubApi api = JCurlInvoker.createProxy(GithubApi.class);

    JQuickCurlReq req = new JQuickCurlReq();
    req.put("user", "your-email@example.com");
    req.put("token", "your-token");

    JGithubAuth auth = api.getUser(req);
    System.out.println(auth);

完成。从复制到跑通,一分钟内搞定。

总结

传统 HTTP 客户端开发的问题在于:curl 已经完整描述了请求,但你还得手动

翻译成 Java 代码。这是一道不必要的翻译工序。

JQuickCurl 的核心价值

  • 粘贴即用 浏览器/Postman 复制的 curl,原样粘贴即可使用
  • 零翻译 零拆解、零手工拼装
  • 动态参数 支持 ${} 和 #{} 两种变量替换
  • XML 配置 curl 命令集中管理,改 curl 不用重新编译
  • 全选项支持 headers、auth、form、proxy、SSL 等全兼容
  • 效率提升 5-8 倍,且不易出错
  • 兼容性 Java 8+,Apache License 2.0 开源

下次从浏览器复制 curl 的时候,别再手动翻译了。粘贴进去,直接跑。


GitHub: github.com/paohaijiao/...

License: Apache License 2.0

Contact: goudingcheng@gmail.com

如果对你有帮助,欢迎 Star 支持!

相关推荐
用户8181870627461 小时前
第13章 死锁诊断实战
后端
枫叶V1 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
后端·agent
用户8181870627461 小时前
第14章 线程池 RejectedExecutionException 与拒绝策略源码
后端
Leo2821 小时前
LangGraph:把 Agent 从“会回答”推进到“可控执行”的工程架构
后端
铁皮饭盒2 小时前
网页端OCR, 加载6mb大小模型, 又快又准, 百度这次真香
前端·后端
程序员-Benothing2 小时前
Java集合:List实现类深度对比
java·开发语言·后端·面试·list
云浪2 小时前
给 AI Agent 加上语音交互:ASR + 流式 TTS 实战
前端·人工智能·后端
卷无止境2 小时前
当代码要上线前,谁在替你把关?——Python安全审查的方法论与实践
后端·python
卷无止境2 小时前
Python Dataclasses:让类定义回归简洁的艺术
后端·python