这是我第一次在春季启动时使用crating,我正在尝试创建事务api。当我运行应用程序时,我得到了这个错误描述:中构造函数的参数0需要一个无法找到的'int‘类型的bean。操作:考虑在您的配置中定义'int‘类型的bean。
模态包: TransactionEntity
@Getter
@Setter
@Builder
@Entity
public class TransactionEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int transactionId;
@NotNull
@Column(unique = true)
private UUID externalId;
@NotNull
private int userId;
@NotNull
private int merchantId;
@NotNull
private int clientReferenceId;
@NotNull
private double amount;
@Enumerated(EnumType.STRING)
@NotNull
private TransactionStatus status;
@NotNull
private String createdBy;
private String updatedBy;
@NotNull
private LocalDateTime createdAt;
@NotNull
private LocalDateTime updatedAt;
}
TransactionRequest
@Component
@Data
@Builder
public class TransactionRequest {
private int userId;
private int merchantId;
private int clientReferenceId;
private double amount;
private String createdBy;
}
TransactionResponse
@Component
@Data
@Builder
public class TransactionResponse {
private int userId;
private int merchantId;
private int clientReferenceId;
private double amount;
private LocalDateTime createdAt;
private TransactionStatus status;
}
TransactionDao
@Component
// Dao class
public class TransactionDao {
@Autowired
TransactionRepository transactionRepository;
TransactionEntity transactionEntity;
public TransactionResponse createTransaction(TransactionRequest transactionRequest){
LocalDateTime cuurentTime = LocalDateTime.now();
transactionEntity.builder().userId(transactionRequest.getUserId())
.merchantId(transactionRequest.getMerchantId())
.clientReferenceId(transactionRequest.getClientReferenceId())
.amount(transactionRequest.getAmount())
.createdBy(transactionRequest.getCreatedBy())
.createdAt(cuurentTime)
.updatedAt(cuurentTime)
.externalId(UUID.randomUUID())
.status(TransactionStatus.CREATED);
transactionRepository.save(transactionEntity);
return TransactionResponse.builder().status(transactionEntity.getStatus())
.createdAt(transactionEntity.getCreatedAt()).build();
}
}
TransactionService
@Service
public class TransactoinService {
@Autowired
public TransactionDao transactionDao;
public TransactionResponse createTransaction(TransactionRequest transactionRequest){
return transactionDao.createTransaction(transactionRequest);
}
}
TransactionController
@RestController
public class TransactionController {
@Autowired
TransactoinService transactoinService;
@PostMapping
TransactionResponse createTransaction(@RequestBody TransactionRequest transactionRequest){
return transactoinService.createTransaction(transactionRequest);
}
}
发布于 2022-09-29 11:29:46
TransactionRequest
被注释为@Component
,因此spring boot
autoscan将尝试在该类之外创建一个@Bean
。
它还带有@Data
注释,因此在创建bean
Spring boot
时,它试图将其他bean作为参数加入到all args constructor
中,并且没有找到要注入constructor
的"int“bean
。
我猜想事务响应不应该是@Component
,或者至少不是Singleton
bean。
发布于 2022-09-29 10:35:09
您不应该将POJO类创建为Spring。在您的@Component
和TransactionResponse
POJO类中删除TransactionResponse
注释。
https://stackoverflow.com/questions/73894036
复制相似问题