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

Spring WebFlux结合Cassandra时DeleteMapping删除操作不生效如何解决

问题根因与修复方案

1. 接口调用方式错误

你定义的是@DeleteMapping类型的接口,默认执行curl localhost:8080/orders/delete/1发送的是GET请求,根本匹配不到该接口,自然不会触发删除逻辑。正确的curl调用命令需要指定请求方法:

curl -X DELETE localhost:8080/orders/delete/1

2. 响应式编程写法错误

你当前的代码违反了Spring WebFlux的响应式流规范:所有异步操作都要通过返回的Publisher(Mono/Flux)暴露给Spring容器,由容器统一订阅执行,不要在方法内部自行subscribe。
你在Repository层的删除操作是内部单独subscribe执行的,和方法返回的Mono.just(uuid)没有任何关联,Spring WebFlux容器只会等待你返回的Mono执行完成,内部的删除操作还没跑完,请求就已经结束,资源可能被提前回收,导致删除没有生效。

请确认各层代码都是直接透传Publisher,不要自行构造返回值,参考修复后的完整代码:

控制器层代码

@DeleteMapping("/delete/{id}")
public Mono<Integer> deleteOrder(@PathVariable("id") int id){
    return orderService.deleteOrder(id);
}

服务层代码

public Mono<Integer> deleteOrder(int id) {
    return orderRepository.deleteOrder(id);
}

修复后的Repository层代码

public Mono<Integer> deleteOrder(int uuid) {
    return Flux.from(
            session.executeReactive(
                    SimpleStatement.builder("DELETE FROM LightNfresh.orders WHERE order_id = ?")
                            .addPositionalValue(uuid)
                            .build()
            )
    )
    // 等待删除操作执行完成后返回传入的id
    .then(Mono.just(uuid));
}

内容的提问来源于stack exchange,提问作者Terry Light

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:21:03