Netflix DGS使用ExtendedScalars时BigDecimal未自动导入如何解决?
问题原因
- 你当前使用的
graphql-dgs-codegen-client-core:5.0.6版本未内置GraphQLBigDecimal标量对应的类型导入规则。Date、Long、LocalDate等类型要么属于java.lang包(无需显式导入),要么已被纳入该版本Codegen的默认导入规则,而BigDecimal属于java.math包,没有默认的自动导入配置,因此生成代码时不会自动添加import java.math.BigDecimal语句。 - 你在代码中添加的是运行时标量注册配置,和代码生成阶段完全独立,运行时的标量声明不会影响Codegen的导入逻辑,所以即便你运行时已经注册了
GraphQLBigDecimal,代码生成阶段也不会自动识别并添加对应导入。
解决方案
方案1:升级DGS Codegen版本
5.1.0及以上版本的DGS Codegen已经官方修复了该问题,内置了GraphQLBigDecimal到java.math.BigDecimal的映射和自动导入规则,直接将graphql-dgs-codegen-client-core版本升级到5.1.0及以上即可解决。
方案2:手动添加Codegen配置(不升级版本时使用)
如果当前环境不允许升级依赖,直接在项目的Gradle构建配置中添加Codegen的自定义类型映射和导入规则即可:
dgsCodegen { // 配置标量到Java全限定类名的映射 typeMapping = [ BigDecimal: "java.math.BigDecimal" ] // 配置生成代码时自动导入的类 includeImports = ["java.math.BigDecimal"] }
配置完成后重新执行代码生成任务,生成的类就会自动带上BigDecimal的导入语句,报错会消失。
内容的提问来源于stack exchange,提问作者Bo Hun Kim
相关产品推荐
相关产品推荐

