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

mvn spring-boot:run报错找不到TemplateLineItemInput构造方法 IDE运行正常

问题根因

你遇到的报错核心是GraphQL反序列化框架无法实例化TemplateLineItemInput输入类,IDE运行正常、mvn spring-boot:run异常的差异来自两者的编译期注解处理逻辑有细微区别,本质是Lombok自动生成的构造函数不符合反序列化要求:

  • 你的类同时使用了@Data和@Builder注解,且所有字段都是final类型。@Builder默认会生成私有访问级别的全参构造函数,仅供给Builder模式调用,反序列化框架无法访问这个私有构造;同时你没有显式配置无参构造,框架找不到可用的实例化入口,就会抛出对应的错误。
  • IDE内置的Lombok插件会自动调整构造函数的可见性适配运行场景,和纯Maven编译的产物逻辑不同,所以会出现两边表现不一致的情况。

解决方案

直接给输入类补充Lombok构造注解即可,有两种可选方案:

方案1(优先推荐)

显式生成公共全参构造,适配final字段的场景:

import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;

import java.math.BigDecimal;

@Data
@Builder(toBuilder = true)
@AllArgsConstructor // 显式生成公共访问级别的全参构造
public class TemplateLineItemInput {
  private final String partMasterId;
  private final String partMasterIdPath;
  private final String actionType;
  private final BigDecimal actionQuantity;
}

方案2(兼容需要无参构造的场景)

如果部分反序列化组件要求必须有无参构造,可额外增加强制无参构造注解:

import lombok.Builder;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor(force = true) // 强制给final字段生成默认null值的无参构造
public class TemplateLineItemInput {
  private final String partMasterId;
  private final String partMasterIdPath;
  private final String actionType;
  private final BigDecimal actionQuantity;
}

验证步骤

修改完成后清理历史编译产物,重新启动即可:

mvn clean spring-boot:run

再执行对应的mutation请求就不会再报构造函数找不到的错误。


内容的提问来源于stack exchange,提问作者Bob Kuhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:02