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

在Quarkus中使用SmallRye GraphQL Client解析JSON标量类型

解决Quarkus SmallRye GraphQL Client解析Contentful富文本JSON标量字段的问题

问题场景

基于Quarkus构建服务,使用SmallRye GraphQL Client查询Contentful GraphQL API时,其他字段(包括嵌套字段)均可正常解析,但Contentful富文本对应的JSON非空标量字段无法解析。该json字段无下属子字段,无法通过创建嵌套类完成映射。


解决方案

方案1:自定义JSON标量反序列化器

SmallRye GraphQL Client支持自定义标量处理逻辑,通过实现ScalarMapper接口适配Contentful的JSON标量:

  1. 实现自定义标量映射类
import io.smallrye.graphql.client.api.ScalarMapper;
import jakarta.json.JsonValue;
import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;

public class ContentfulJsonScalarMapper implements ScalarMapper<JsonValue, Object> {

    private final Jsonb jsonb = JsonbBuilder.create();

    @Override
    public Object fromGraphQLScalar(JsonValue value) {
        // 可按需转换为Map、自定义DTO等类型,这里以Object为例
        return jsonb.fromJson(value.toString(), Object.class);
    }

    @Override
    public JsonValue toGraphQLScalar(Object input) {
        // 查询场景下无需序列化,返回null即可
        return null;
    }
}
  1. 在Quarkus配置中注册该映射器
    修改application.properties,添加对应客户端的标量映射配置:
quarkus.smallrye-graphql-client."你的客户端名称".scalar-mappers=com.your.package.ContentfulJsonScalarMapper

替换你的客户端名称为实际配置的GraphQL客户端名,com.your.package.ContentfulJsonScalarMapper为自定义类的全路径。

方案2:用String类型直接接收

若无需即时解析JSON结构,可在DTO中将json字段定义为String类型,后续自行解析:

public class ContentfulEntry {
    // 其他业务字段
    private String json; // 映射富文本的JSON标量字段

    // getter、setter方法
}

后续解析示例:

Jsonb jsonb = JsonbBuilder.create();
Map<String, Object> richTextData = jsonb.fromJson(entry.getJson(), new TypeReference<Map<String, Object>>(){});

方案3:使用Jakarta JsonValue类型接收

直接用jakarta.json.JsonValue映射字段,保留JSON原始结构以便灵活操作:

public class ContentfulEntry {
    // 其他业务字段
    private JsonValue json;

    // getter、setter方法
}

使用示例:

JsonObject richTextObject = (JsonObject) entry.getJson();
JsonArray contentNodes = richTextObject.getJsonArray("content");
// 按需处理JSON节点

内容的提问来源于stack exchange,提问作者Mohamed Houssein Douici

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:10:36