GraphQL Java mutation操作中嵌入数组解析为null问题咨询
问题解答
GraphQL的input类型完全支持嵌入数组,和普通type类型的数组定义规则完全一致,不需要额外特殊语法。
你遇到的数组字段全部解析为null且无报错的问题,核心原因是GraphQL schema定义的字段名与Java POJO的属性名大小写不匹配,GraphQL Java Tools做字段映射时默认大小写敏感,匹配不到对应属性就会静默赋值为null,因为你没有给这两个数组字段加非空约束,所以不会抛出任何错误或警告。
具体问题点
- Schema中
ClassInput的两个数组成员首字母大写:
但对应Java类里的属性是小驼峰命名:input ClassInput { id: ID label: String ClassroomInput: [ClassroomInput] StudentInput: [IdentifierInput] }classroomInput、studentInput,二者无法匹配。 - 额外隐患:你标注的schema文件名
project.qraphqls存在拼写错误,正确后缀应为.graphqls,如果扫描路径配置依赖文件后缀,会导致schema加载异常。另外IdentifierInput中Java侧id属性为Long类型,但schema中定义为Int!,GraphQL Int类型对应Java的Integer,传值过大时会出现类型转换溢出。
修复方法
二选一即可:
- 推荐方案:统一命名规范,将schema中
ClassInput的两个字段改为小驼峰格式,和Java属性对齐,符合通用开发约定:input ClassInput { id: ID label: String classroomInput: [ClassroomInput] studentInput: [IdentifierInput] } - 若不想修改schema,可在Java类的对应属性上添加
@GraphQLField注解显式声明映射关系:@GraphQLField(name = "ClassroomInput") private List<ClassroomInput> classroomInput; @GraphQLField(name = "StudentInput") private List<IdentifierInput> studentInput;
调整完成后重启服务,数组字段即可正常解析注入。
内容的提问来源于stack exchange,提问作者Bill Snee
相关产品推荐
相关产品推荐

