Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我发送POST请求时,AXON SAGA实现中出现404错误。原因可能是什么?_Java_Spring Boot_Event Handling_Axon_Saga - Fatal编程技术网

Java 当我发送POST请求时,AXON SAGA实现中出现404错误。原因可能是什么?

Java 当我发送POST请求时,AXON SAGA实现中出现404错误。原因可能是什么?,java,spring-boot,event-handling,axon,saga,Java,Spring Boot,Event Handling,Axon,Saga,我使用Axon和Spring Boot实现了SAGA。这是简单的订单和客户服务。一切看起来都很好,但是当我通过邮递员发送post请求时,我发现404未找到。我猜问题与OrderManagementSaga.java有关。请帮助我 OrderManagementSaga.java @Saga public class OrderManagementSaga { @Inject private transient CommandGateway commandGateway;

我使用Axon和Spring Boot实现了SAGA。这是简单的订单和客户服务。一切看起来都很好,但是当我通过邮递员发送post请求时,我发现404未找到。我猜问题与OrderManagementSaga.java有关。请帮助我

OrderManagementSaga.java

@Saga
public class OrderManagementSaga {

    @Inject
    private transient CommandGateway commandGateway;

    @StartSaga
    @SagaEventHandler(associationProperty = "orderId")
    public void handle(OrderCreatedEvent orderCreatedEvent){

        
       SagaLifecycle.associateWith("customerId", orderCreatedEvent.customerId);

        
            commandGateway.send(new CreateInvoiceCommand(orderCreatedEvent.customerId,orderCreatedEvent.price,orderCreatedEvent.orderId));
     

       
    }

    @SagaEventHandler(associationProperty = "customerId")
    public void handle(InvoiceCreatedEvent invoiceCreatedEvent){
      
        
        SagaLifecycle.associateWith("orderId",invoiceCreatedEvent.orderId);
        
        commandGateway.send(new UpdateOrderStatusCommand(invoiceCreatedEvent.orderId, invoiceCreatedEvent.price, invoiceCreatedEvent.customerId));
       
        
        
    }


    @SagaEventHandler(associationProperty = "orderId")
    public void handle(OrderUpdatedEvent orderUpdatedEvent){
        SagaLifecycle.end();
    }
}
OrderCommandController.java

@RestController
public class OrderCommandController {
    
    private OrderCommandService orderCommandService;

    public OrderCommandController(OrderCommandService orderCommandService) {
        this.orderCommandService = orderCommandService;
    }

    @PostMapping("/orders")
    public CompletableFuture<String> createOrder(@RequestBody OrderCreateDTO orderCreateDTO){
        return orderCommandService.createOrder(orderCreateDTO);
    }
    

}
CustomerAggregate.java

@Aggregate
public class OrderAggregate {
    

    

    @AggregateIdentifier
    private String orderId;
    
    private BigDecimal price;
    
    private OrderStatus orderStatus;
    
    private String customerId;

    public OrderAggregate() {
    }

    @CommandHandler
    public OrderAggregate(CreateOrderCommand createOrderCommand) {
        AggregateLifecycle.apply(new OrderCreatedEvent(createOrderCommand.orderId,createOrderCommand.price, createOrderCommand.customerId));
    }

    @EventSourcingHandler
    protected void on(OrderCreatedEvent orderCreatedEvent) {
        this.orderId = orderCreatedEvent.orderId;
        this.customerId = orderCreatedEvent.customerId;
        this.orderStatus = OrderStatus.CREATED;
    }

    @CommandHandler
    protected void on(UpdateOrderStatusCommand updateOrderStatusCommand) {
        AggregateLifecycle
                .apply(new OrderUpdatedEvent(updateOrderStatusCommand.orderId,updateOrderStatusCommand.customerıd,updateOrderStatusCommand.price,OrderStatus.CREATED));
    }

    @EventSourcingHandler
    protected void on(OrderUpdatedEvent orderUpdatedEvent) {
        this.customerId = orderUpdatedEvent.customerId;
        this.orderId = orderUpdatedEvent.orderId;
        this.orderStatus = OrderStatus.APPROVED;
        this.price = orderUpdatedEvent.price;
    }
@Aggregate
public class CustomerAggregate {

    @AggregateIdentifier
    private String customerId;
    
    private BigDecimal budget;
    
    private String orderId;
 


    


    public CustomerAggregate(String customerId, BigDecimal budget, String orderId) {
        super();
        this.customerId = customerId;
        this.budget = budget;
        this.orderId = orderId;
    }
    @CommandHandler
    public CustomerAggregate(CreateInvoiceCommand createInvoiceCommand){
        
        AggregateLifecycle.apply(new InvoiceCreatedEvent(createInvoiceCommand.price, createInvoiceCommand.customerId, createInvoiceCommand.orderId));
    

    }
    @EventSourcingHandler
    protected void on(InvoiceCreatedEvent invoiceCreatedEvent){
        
        this.customerId = invoiceCreatedEvent.customerId;
        this.budget = this.budget.subtract(invoiceCreatedEvent.price);
        this.orderId = invoiceCreatedEvent.orderId;
        
    }

    

    public String getCustomerId() {
        return customerId;
    }
    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }
    public BigDecimal getBudget() {
        return budget;
    }

    public void setBudget(BigDecimal budget) {
        this.budget = budget;
    }
    
    
}
我不认为这个问题与命令和事件类有关,所以我只分享其中一个作为示例; CreateOrderCommand.java

public class CreateOrderCommand {
    
     @TargetAggregateIdentifier
        public final String orderId;
        public final String customerId;
        public final BigDecimal price;
        public CreateOrderCommand(String orderId, String customerId, BigDecimal price) {
            super();
            this.orderId = orderId;
            this.customerId = customerId;
            this.price = price;
            
        }

}

404表示您首先无法到达REST控制器。这可以调试和检查吗?如果这是按预期工作的,那么可以更详细地检查此控制器的实现:REST控制器中注入的是什么
orderCommandService
。希望它使用Axon命令网关将命令发送到
OrderAggregate
OrderAggregate
将发布一个类型为
OrderCreatedEvent
的事件,该事件将启动整个事件。

请注意,
orderCommandService
必须声明为SpringBean才能注入REST控制器