Java 项目怎么接生图 API?Spring Boot 调甜甜圈API 的完整写法

Java 项目怎么接生图 API?Spring Boot 调甜甜圈API 的完整写法

网上讲 AIGC 接口接入的文章九成是 Python,但国内做业务系统的大量是 Java。上周把生图能力接进一个 Spring Boot 项目,记一下踩过的地方。

服务用的是甜甜圈API (dashengfenshen.cn),它的文生图接口 兼容 OpenAI 的 chat/completions 协议,所以 Java 侧不需要找什么专用 SDK,标准 HTTP 客户端就能调。

一、接口信息

项 值
Base URL https://dashengfenshen.cn
接口 POST /v1/chat/completions
鉴权 请求头 Authorization: Bearer {你的API密钥}
数据格式 application/json,UTF-8

二、用 JDK 自带的 HttpClient

不引第三方依赖,JDK 11+ 的 HttpClient 就够:

java 复制代码
@Service
public class ImageGenService {

    private static final String BASE = "https://dashengfenshen.cn/v1/chat/completions";

    @Value("${ttq.api-key}")
    private String apiKey;                       // 放配置里,别硬编码进代码

    private final HttpClient http = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
    private final ObjectMapper mapper = new ObjectMapper();

    public String generate(String prompt, String model) throws Exception {
        Map<String, Object> body = Map.of(
                "model", model,                  // nano-banana2 / nano-banana-pro / gpt-image-2
                "messages", List.of(Map.of("role", "user", "content", prompt))
        );

        HttpRequest req = HttpRequest.newBuilder(URI.create(BASE))
                .header("Authorization", "Bearer " + apiKey)
                .header("Content-Type", "application/json")
                .timeout(Duration.ofSeconds(120))   // 生图慢,读超时一定要给足
                .POST(HttpRequest.BodyPublishers.ofString(
                        mapper.writeValueAsString(body), StandardCharsets.UTF_8))
                .build();

        HttpResponse<String> resp = http.send(req, HttpResponse.BodyHandlers.ofString());
        if (resp.statusCode() != 200) {
            throw new IllegalStateException("生图失败 " + resp.statusCode() + ": " + resp.body());
        }
        return resp.body();
    }
}

三、三个必须注意的点

1. 超时要分开设。 connectTimeout 是连接超时,给 10 秒足够;但读超时得设到 120 秒------生图不是普通接口,几秒起步,Pro 级出 4K 更久。很多人只设了连接超时,然后在生产上看到一堆莫名其妙的读超时。

2. 别在 Web 请求线程里同步等。 用户点一下要等几十秒,连接池很快就被占满。正确做法是丢进异步任务,前端轮询或者用 WebSocket 推:

java 复制代码
@Async("genExecutor")
public CompletableFuture<String> generateAsync(String prompt, String model) {
    return CompletableFuture.completedFuture(generateQuietly(prompt, model));
}

线程池大小按自己的配额定,别无限放大。

3. 密钥只能在服务端。 这是老生常谈但真的有人犯:Authorization 头里的密钥绝不能出现在前端代码、小程序包或 App 里,一律走后端代理。

四、模型和成本

model 字段可选值和消耗(积分制按次计费):

模型代码 说明 消耗
nano-banana2 Flash 级,速度更快 8 积分/次
Nano Banana 2 Lite 轻量版,更快更便宜 8 积分/次
nano-banana-pro Pro 级,支持 1K/2K/4K 10 积分/次
ttq-cutout 抠图 10 积分/次
Veo 3.1 视频生成 Google Veo 3.1 120 积分/次
Sora 2 OpenAI Sora 2,16:9 / 9:16,12 秒 130 积分/次

换模型只改 model 字符串,Java 侧连方法签名都不用动,做降级链特别方便:主模型失败自动落到便宜的那个,服务不断。

五、小结

Java 接 生图 API 其实没什么特殊的,把超时、异步、密钥这三件事处理对就行。甜甜圈API(dashengfenshen.cn)的 OpenAI 兼容协议让 Java 侧完全不需要专用 SDK:

  • 一个接口 + 一个密钥接生图、抠图、生视频全部模型;
  • 价格便宜,单次成本明码标价,业务能直接算账;
  • 并发高,批量任务不用自己写复杂限流;
  • 出图快、出视频快,异步任务的排队时间短很多;
  • 稳定,上游抖动不该变成你的线上事故。

文档地址:dashengfenshen.cn 。

相关推荐
代码山河10 小时前
大模型的幻觉是什么?为什么会产生幻觉
人工智能·ai·大模型
数聚天成DeepSData10 小时前
验收一批标注数据时,一致性到底在比谁和谁
人工智能·深度学习·机器学习·数据集·deepsdata
码农小白AI10 小时前
监督抽查报告要素不全?IACheck AI 报告文档审核 Agent 做报告要素完整性审查
人工智能
海宇AI11 小时前
零信任架构实战:基于海宇行驶OCR证识别构建自动化租车车队行驶证电子档案网关
运维·人工智能·架构·自动化·1024程序员节
大模型真好玩11 小时前
大模型训练全流程实战指南实战篇(十七)— LLamaFatory预训练实战:从语料到模型
人工智能·agent·deepseek
蒲公英eric11 小时前
逻辑回归与信用违约预测:从S曲线到分类器
人工智能·数学建模·逻辑回归
安睿杰翻译(上海)有限公司12 小时前
AI 同传技术链路拆解:准确率、时延瓶颈、术语库工程化与会议落地选型方案
人工智能
不老刘12 小时前
异构双 Agent 协同:构建无人值守的长任务自动化研发流水线
运维·人工智能·自动化·ai编程·1024程序员节
迷途呀12 小时前
强化学习概念
人工智能·深度学习·机器学习·强化学习·1024程序员节
AI开源软件12 小时前
87.4%:OpenAI 让模型写出 20 种语言 SQLite
人工智能·ai·openai·fortran·cobol·技术翻译·银行核心系统