【发布时间】:2021-11-26 01:17:42
【问题描述】:
我有一个中级的 Spring Boot + Lombok 项目,它的工作方式类似于 IDE 中的冠军,但是当我从命令行通过mvn spring-boot:run 运行它时会出现奇怪的错误。它是一个相当新的版本 Spring Boot...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Lombok 不起眼,来自 Spring Initializr (https://start.spring.io/)。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
它抱怨的JavaBean同样无聊......
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder(toBuilder = true)
public class TemplateLineItemInput {
private final String partMasterId;
private final String partMasterIdPath;
private final String actionType;
private final BigDecimal actionQuantity;
}
这个 Boot 项目的 API 是 GraphQL,但是当我从 mvn spring-boot:run 调用中执行以下突变时,它总是以错误的形式返回(控制台上没有任何内容......框架以某种方式将其踢出)。
Request...
mutation createTemplateLineItem($tbomId: ID!) {
createTemplateLineItem(
tbomId: $tbomId
input: {
partMasterId: "2"
partMasterIdPath: "808863036.1"
actionType: "ADD"
actionQuantity: "2"
}) {
...TBomFrag
}
}
...
{
"partMasterId": "5025489768",
"tbomId": "a4688d22-9d99-41a2-9777-6acc75b2aab9",
"lineItemId": "9e460199-34fb-432c-b971-8cd8321d3283"
}
Response...
{
"errors": [
{
"message": "No primary or single public constructor found for class aero.blue.ems.boa.domain.TemplateLineItemInput - and no default constructor found either",
"locations": [
{
"line": 20,
"column": 3
}
],
"path": [
"createTemplateLineItem"
],
"extensions": {
"classification": "INTERNAL_ERROR"
}
}
],
"data": {
"createTemplateLineItem": null
}
}
我的spring-boot-maven-plugin 配置为...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.4</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>repackage</id>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
...同样来自 Spring Initializr
当我直接从 IDE 运行应用程序时,没有问题。突变工作正常。
pom.xml 中的 spring-boot:run 配置是否缺少某些内容?我是否必须将插件引入注释处理?这真是令人困惑。
【问题讨论】:
-
哦....我的...一个线索。 stackoverflow.com/questions/34241718/… 我的
@Builder使用可能会影响 Lombok 正在构建的构造函数,因此杰克逊无法再处理它。 “Delombok”在这里很有用。我确实确实没有公共构造函数。为什么它在 IDE 中工作?也许没关系....我知道杰克逊需要公开的东西
标签: spring-boot maven lombok graphql-java