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

Spring Boot项目PutMapping接口返回成功但数据无变化问题排查

问题根因及修复方案

1. 核心问题:实体修改未持久化到数据库

Service层修改Booking实体属性后,没有调用JPA Repository的save方法同步改动到数据库,修改仅作用于内存中的临时实体对象,不会自动落库。
修复代码:

public void updateBooking(Long bookingId, Integer tickets) {
    // 校验预约id是否存在
    Booking booking = bookingRepository.findById(bookingId).orElseThrow(() -> new IllegalStateException(
            "预约id " + bookingId + " 不存在"));

    if (tickets != null  && !Objects.equals(booking.getTickets(), tickets)) {
        booking.setTickets(tickets);
        // 原代码setAmount为无效赋值,若金额需按新票数重新计算,替换为对应计算逻辑即可,例如 booking.setAmount(tickets * 单张票价)
        // booking.setAmount(booking.getAmount());
        // 新增save调用持久化修改
        bookingRepository.save(booking);
    }
    else {
        throw new IllegalStateException("更新失败");
    }
}

2. 补充排查点

  • 若Service类或updateBooking方法添加了@Transactional注解,事务提交时会自动将托管态实体的改动刷入数据库,无需手动调用save,可先检查是否正确配置了事务注解。
  • 确认Postman传参格式:tickets是@RequestParam参数,需放在URL查询参数中传递,示例请求路径为PUT /你的接口路径/{bookingId}?tickets=新票数,如果将参数放在请求体中传递,后端会收到null,直接进入else分支抛出异常。
  • 原Controller层返回值为void,调用成功时不会返回任何响应,可根据业务需要添加响应体返回更新后的预约信息,方便调试确认修改结果。

内容的提问来源于stack exchange,提问作者Malik Safwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:04