使用createPlayer mutation创建球员时出现空指针异常求助
问题原因与解决方案
核心问题
空指针异常的直接原因是GraphQL mutation定义的参数名与Controller方法中@Argument注解的参数名不匹配,导致Spring无法正确绑定传入的PlayerDTO参数,最终playerdto实例为null,调用playerdto.getName()时触发异常。
具体对应关系:
- GraphQL Mutation中
createPlayer的参数名为plyr - Controller方法中
@Argument标注的参数名为playerdto
Spring GraphQL默认按参数名进行绑定,两者不一致时无法解析传入参数,导致playerdto为null。
修复方案
有两种可行的修复方式:
方案1:统一参数名
修改Controller方法的@Argument参数名,与GraphQL定义保持一致:
@MutationMapping public Player createPlayer(@Argument PlayerDTO plyr){ return playerRepository.save(playerMapper.ToEntity(plyr)); }
方案2:显式指定参数映射
若不想修改参数名,可通过@Argument的name属性显式指定对应GraphQL中的参数名:
@MutationMapping public Player createPlayer(@Argument(name = "plyr") PlayerDTO playerdto){ return playerRepository.save(playerMapper.ToEntity(playerdto)); }
额外验证点
- 确认GraphQL请求中正确传入
plyr参数,且包含所有必填字段(name、lastName、position) - 检查
PlayerDTO类是否存在无参构造函数及对应getter/setter方法,Spring依赖这些方法完成对象实例化与属性填充
内容的提问来源于stack exchange,提问作者Ege Coskun
相关产品推荐
相关产品推荐

