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

Spring WebFlux R2dbc 查询单条数据更新过期时间的代码优化问题

响应式租户过期时间更新接口优化方案
// 推荐改用构造器注入,替代字段注入
private final R2dbcEntityTemplate r2dbcEntityTemplate;

public TenantController(R2dbcEntityTemplate r2dbcEntityTemplate) {
    this.r2dbcEntityTemplate = r2dbcEntityTemplate;
}

/**
 * 更新租户过期时间
 * @param vo 请求参数 格式为 {tenantId:"", day:"1"}
 * @return 租户不存在返回404,更新成功返回204,乐观锁冲突返回409
 */
@PatchMapping
public Mono<ResponseEntity<Void>> updateTime(@Valid @RequestBody TenantUpdate vo) {
    return r2dbcEntityTemplate
            .selectOne(query(where("tenant_id").is(vo.getTenantId())), Tenant.class)
            // 同步修改实体属性用map即可,不需要flatMap
            .map(db -> {
                LocalDateTime baseTime = db.getTenantExpiredTime() != null ? db.getTenantExpiredTime() : LocalDateTime.now();
                db.setTenantExpiredTime(baseTime.plusDays(vo.getDay()));
                return db;
            })
            .flatMap(r2dbcEntityTemplate::update)
            // 同步转换为响应结果用map即可
            .map(updated -> ResponseEntity.noContent().<Void>build())
            // 处理乐观锁冲突异常
            .onErrorResume(ObjectOptimisticLockingFailureException.class, 
                    e -> Mono.just(ResponseEntity.status(HttpStatus.CONFLICT).build()))
            // 租户不存在返回404
            .switchIfEmpty(Mono.fromSupplier(() -> ResponseEntity.notFound().build()));
}

核心优化说明

  • 移除冗余类型强转:删除了原代码中不必要的Function泛型强转,Java编译器可自动推导流中数据类型,代码更简洁
  • 响应式API语义优化:纯同步的对象属性修改、结果转换操作统一使用map,替代flatMap + Mono.just的冗余写法,符合响应式编程的API设计规范,也降低了不必要的包装开销
  • 空值逻辑简化:用三目运算简化了过期时间为空的兜底逻辑,替代多行if判断,代码可读性更高
  • 注入方式优化:将@Autowired字段注入改为构造器注入,符合Spring官方推荐规范,同时方便后续编写单元测试时手动注入mock对象
  • 异常处理补全:新增了乐观锁冲突异常的捕获逻辑,返回409 Conflict状态码,符合RESTful接口设计规范
  • 新增参数校验:在请求参数前加@Valid注解,可配合TenantUpdate类中的@NotBlank(校验tenantId非空)、@Min(value = 1, message = "增加天数不能小于1")注解,提前拦截非法请求,避免无效数据库查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:39:03