You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Netflix DGS GraphQL客户端Upload Mutation上传功能的实现示例

Netflix DGS Java客户端Upload Mutation实现示例

前置依赖配置

首先确保你的Spring项目中已引入DGS客户端starter依赖,版本建议和服务端DGS版本对齐:

<!-- Maven 依赖示例 -->
<dependency>
    <groupId>com.netflix.graphql.dgs</groupId>
    <artifactId>graphql-dgs-client-starter</artifactId>
    <version>你使用的DGS版本号</version>
</dependency>

核心实现步骤

  • 确认服务端的Upload Mutation定义,参考示例如下:
type Mutation {
    uploadFile(file: Upload!, description: String): FileInfo
}
  • 构造客户端请求逻辑,直接用DgsClient实例构建请求,传入MultipartFile类型的文件参数即可,DGS客户端底层会自动处理multipart/form-data的请求封装:
import com.netflix.graphql.dgs.client.MonoGraphQLClient;
import org.springframework.web.multipart.MultipartFile;
import reactor.core.publisher.Mono;
import java.util.HashMap;
import java.util.Map;
import lombok.Data;

@Component
public class GraphqlUploadService {

    private final MonoGraphQLClient dgsGraphQLClient;

    // 构造注入DGS客户端,Spring会自动装配配置好的实例
    public GraphqlUploadService(MonoGraphQLClient dgsGraphQLClient) {
        this.dgsGraphQLClient = dgsGraphQLClient;
    }

    public Mono<FileInfo> uploadFile(MultipartFile file, String description) {
        // 1. 构造GraphQL查询语句
        String query = """
                mutation uploadFile($file: Upload!, $description: String) {
                    uploadFile(file: $file, description: $description) {
                        id
                        fileName
                        fileSize
                        url
                    }
                }
                """;
        
        // 2. 组装变量,直接传入MultipartFile对象即可
        Map<String, Object> variables = new HashMap<>();
        variables.put("file", file);
        variables.put("description", description);
        
        // 3. 发起请求,解析返回结果
        return dgsGraphQLClient.reactiveExecuteQuery(query, variables)
                .map(response -> response.extractValueAsObject("uploadFile", FileInfo.class));
    }

    // 返回值映射实体类,和服务端返回字段对齐即可
    @Data
    public static class FileInfo {
        private String id;
        private String fileName;
        private Long fileSize;
        private String url;
    }
}

常见问题排查

  • 确保你使用的DGS客户端版本在5.0.x以上,低版本对Upload的支持存在已知bug
  • 不要手动修改请求的Content-Type,DGS客户端会自动识别文件参数并设置为multipart/form-data
  • 如果有多个文件上传需求,直接传入List<MultipartFile>类型参数即可,变量定义对应为[Upload!]!类型

内容的提问来源于stack exchange,提问作者Y_K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:01