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

如何在graphql-kotlin客户端中抑制GraphQLClientRequest请求体多余字段?

问题解决方法

原因说明

graphql-kotlin 客户端默认会将GraphQLClientRequest实现类的所有公开构造属性直接序列化到 GraphQL 请求根结构中,你定义的submissionUuid是公开构造参数,因此被额外插入到了请求体中。

解决方案

方案1:单字段忽略(最常用)

直接给不需要序列化的构造参数添加框架自带的@GraphQLIgnore注解即可,修改后的类定义如下:

class SubmissionQuery(@GraphQLIgnore val submissionUuid: String): GraphQLClientRequest<SubmissionQuery.Result> { ... }

该注解只会阻止字段被序列化到请求体,完全不影响你在类内部使用该参数构造查询语句或变量。

方案2:全局统一过滤(适合多额外参数场景)

如果你有大量请求类存在额外构造参数,可以通过自定义客户端序列化规则,全局只保留 GraphQL 规范要求的三个请求字段:

  1. 首先定义序列化混合类,指定仅保留允许的字段:
import com.fasterxml.jackson.annotation.JsonIncludeProperties

@JsonIncludeProperties(value = ["query", "variables", "operationName"])
abstract class GraphQLClientRequestSerializationMixIn
  1. 初始化 GraphQL 客户端时,给 ObjectMapper 注册这个混合类:
import com.expediagroup.graphql.client.jackson.GraphQLClientObjectMapper
import com.expediagroup.graphql.client.GraphQLClient

val customObjectMapper = GraphQLClientObjectMapper()
    .addMixIn(GraphQLClientRequest::class.java, GraphQLClientRequestSerializationMixIn::class.java)

// 使用自定义mapper初始化客户端
val graphQLClient = GraphQLClient(url = "你的GQL接口地址", mapper = customObjectMapper)

配置完成后所有请求类的额外属性都不会被序列化到请求根节点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:05