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

如何自定义Quarkus Smallrye GraphQL的JSON序列化以忽略空值?

自定义Quarkus Smallrye GraphQL的JSON序列化(忽略Null值)

由于Quarkus中Smallrye GraphQL的响应序列化依赖Eclipse Parsson(JSON-B规范的实现),可以通过以下两种方式实现忽略null值的需求:

方案1:全局JSON-B配置(应用级生效)

直接在application.properties中添加JSON-B全局配置,让所有JSON序列化操作都忽略null值:

quarkus.jsonb.serialization-include=NON_NULL

该配置会让Parsson在序列化时自动排除值为null的属性,无需编写额外代码。

方案2:针对GraphQL的局部配置(仅GraphQL响应生效)

如果只希望GraphQL的响应忽略null值,不影响应用其他模块的JSON序列化,可以创建一个带有@GraphQL限定符的CDI生产者,专门为GraphQL模块提供自定义的Jsonb实例:

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.bind.JsonbConfig;
import org.eclipse.microprofile.graphql.GraphQL;

@ApplicationScoped
public class GraphQLJsonbProducer {

    @Produces
    @GraphQL
    public Jsonb produceGraphQLJsonb() {
        JsonbConfig config = new JsonbConfig()
                .withNullValues(false); // 配置忽略null值
        return JsonbBuilder.create(config);
    }
}

为什么之前的方案无效?

你之前编写的普通ObjectMapper/JsonbConfig生产者没有生效,是因为Smallrye GraphQL模块会优先使用带有@GraphQL限定符的Jsonb实例,普通生产者无法覆盖GraphQL内部的序列化配置。

验证

启动应用后发起GraphQL请求,响应中的null属性会被自动过滤,例如原本包含"baz": null的响应会变为仅保留非null属性的结果:

{
  "foo": "bar"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:30