lombok @SuperBuilder 更改我的字段名称之一?

问题描述 投票:0回答:1

我有一个由 lombok 创建的 DTO 类的层次结构

@SuperBuilder
。使用它时,其中一个字段会被神秘地重命名。为什么会这样?我该怎么做才能保持原来的名字? 这是 lombok 问题或功能吗 - 但我在 lombok 文档中找不到任何提示?

@SuperBuilder
@Getter
@NoArgsConstructor
public class ExpenseDto {
    @NonNull
    @Size(max = 30)
    protected String recipient;

    @NonNull
    @Size(max = 30)
    protected String purpose;
    
    // ...

    protected boolean isInvoiced;  // this somehow is changed
}

@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
public class ExpenseEntityDto extends ExpenseDto {
    @Size(max = 16)
    long expenseId;

    @Size(max = 16)
    @NonNull
    protected String accountNo;

    // ...
}

我这样使用它:

public ExpenseEntityDto domainToEntityDto(Expense domain) {
   return ExpenseEntityDto.builder()
                .expenseId(domain.getExpenseId())
                .accountNo(domain.getAccountNo())
                .recipient(domain.getRecipient())
                .purpose(domain.getPurpose())
                .isInvoiced(domain.isInvoiced())  // produces a field 'invoiced' !?
                .build();
}

在飞行中,DTO JSON 如下所示:

{
    "recipient": "Mobsters Inc.",
    "purpose": "protection services rendered",
    "expenseId": 1,
    "accountNo": "1234",
    "invoiced": false     // Huh !? expected 'isInvoiced' instead
}

更好的是,openapi 规范(由 quarkus 中的smallrye-openapi 扩展生成)在架构中显示了两个版本(在 swagger ui 中相同):

ExpenseEntityDto:
      type: object
      properties:
        recipient:
          maxLength: 30
          type: string
        purpose:
          maxLength: 30
          type: string
        isInvoiced:
          type: boolean
        invoiced:
          type: boolean
        expenseId:
          format: int64
          type: integer
        accountNo:
          maxLength: 16
          type: string
java quarkus openapi lombok
1个回答
0
投票

您当然阅读了文档

对于以

boolean
开头并紧跟首字母大写字母的
is
字段,没有任何前缀来生成 getter 名称。

这是默认的 Lombok 行为(不确定是否可以覆盖)。 Lombok 尽可能遵循 Java Beans 规范。名为

isInvoiced
的布尔字段将获得像
isIsInvoiced
这样的访问器,这很令人困惑,因此它不会生成额外的
is

© www.soinside.com 2019 - 2024. All rights reserved.