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

SpringBoot交易API启动报错:无法找到int类型Bean的问题咨询

解决SpringBoot启动时找不到int类型Bean的错误

错误根源

你遇到的启动错误,核心原因是**TransactionRequest和TransactionResponse被错误标记为@Component**,同时结合了@Builder注解。Lombok的@Builder会为类生成全参构造器,Spring在尝试创建这两个类的Bean时,会调用该构造器,但构造器参数都是int、double这类基本类型,Spring容器中不存在对应类型的Bean,因此抛出异常。

解决步骤

1. 移除DTO类的@Component注解

TransactionRequest和TransactionResponse是数据传输对象(DTO),不需要由Spring容器管理,直接移除它们的@Component注解:

修正后的TransactionRequest

@Data
@Builder
public class TransactionRequest {
    private int userId;
    private int merchantId;
    private int clientReferenceId;
    private double amount;
    private String createdBy;
}

修正后的TransactionResponse

@Data
@Builder
public class TransactionResponse {
    private int userId;
    private int merchantId;
    private int clientReferenceId;
    private double amount;
    private LocalDateTime createdAt;
    private TransactionStatus status;
}

2. 修复TransactionDao的空指针错误

原代码中transactionEntity仅声明未初始化,直接调用transactionEntity.builder()会触发空指针异常,需改为调用TransactionEntity.builder()并通过build()生成实例:

@Component
public class TransactionDao {

    @Autowired
    TransactionRepository transactionRepository;

    public TransactionResponse createTransaction(TransactionRequest transactionRequest){

        LocalDateTime currentTime = LocalDateTime.now();
        // 初始化TransactionEntity实例
        TransactionEntity transactionEntity = TransactionEntity.builder()
                .userId(transactionRequest.getUserId())
                .merchantId(transactionRequest.getMerchantId())
                .clientReferenceId(transactionRequest.getClientReferenceId())
                .amount(transactionRequest.getAmount())
                .createdBy(transactionRequest.getCreatedBy())
                .createdAt(currentTime)
                .updatedAt(currentTime)
                .externalId(UUID.randomUUID())
                .status(TransactionStatus.CREATED)
                .build();
        
        transactionRepository.save(transactionEntity);
        
        // 补充返回DTO的完整字段
        return TransactionResponse.builder()
                .userId(transactionEntity.getUserId())
                .merchantId(transactionEntity.getMerchantId())
                .clientReferenceId(transactionEntity.getClientReferenceId())
                .amount(transactionEntity.getAmount())
                .status(transactionEntity.getStatus())
                .createdAt(transactionEntity.getCreatedAt())
                .build();
    }
}

3. 修正拼写错误

  • 修正服务类的拼写错误:TransactoinService改为TransactionService
@Service
public class TransactionService {
    @Autowired
    public TransactionDao transactionDao;

    public TransactionResponse createTransaction(TransactionRequest transactionRequest){
        return transactionDao.createTransaction(transactionRequest);
    }
}
  • 修正控制器中的拼写错误,并添加明确请求路径:
@RestController
public class TransactionController {
    @Autowired
    TransactionService transactionService;

    @PostMapping("/transactions")
    TransactionResponse createTransaction(@RequestBody TransactionRequest transactionRequest){
        return transactionService.createTransaction(transactionRequest);
    }
}

内容的提问来源于stack exchange,提问作者Prince Bhati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:10:23