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

如何在请求校验流程中替换大量嵌套if语句?

避免嵌套if的重构方案

针对你这段多层嵌套的请求校验代码,最直接有效的优化方式是使用提前返回(守卫条款),把每个错误条件优先判断并返回结果,让主逻辑留在代码末尾,彻底消除嵌套。

重构思路

  • 把所有失败的校验条件放在前面,一旦触发就直接返回对应错误响应,不再进入后续逻辑
  • 保留合法情况下的主逻辑在代码最后,避免层层缩进
  • 补充潜在异常的捕获处理,让校验逻辑更健壮

重构后的代码

public <T> ResponseEntity<T> validateRequest(Request request) {
    // 校验agent是否存在,不存在直接返回错误
    if (!agentRepository.findAgentByRequestPoint(request.getPoint()).isPresent()) {
        return ResponseEntity.ok((T) ErrorDTO.from(bundle.getString("point.not.set")));
    }

    // 校验function是否为CheckAcc,不是则直接返回错误
    if (!"CheckAcc".equals(request.getAdvanced().getFunction())) {
        return ResponseEntity.ok((T) response.wrongCheck(1, 1));
    }

    // 校验serviceId格式合法性及服务是否存在
    try {
        Long serviceId = Long.parseLong(request.getAdvanced().getService());
        if (!ServiceRepository.findServiceByServiceId(serviceId).isPresent()) {
            return ResponseEntity.ok((T) response.wrongCheck(1, 4));
        }
    } catch (NumberFormatException e) {
        // 补充serviceId格式错误的处理逻辑,可根据实际需求调整错误码
        return ResponseEntity.ok((T) response.wrongCheck(1, 5));
    }

    // 所有校验通过,执行后续主逻辑
    // ... 此处编写原嵌套最内层的业务逻辑

    return ResponseEntity.ok((T) yourSuccessResponse); // 替换为实际成功响应对象
}

优化点说明

  • 彻底消除三层嵌套,代码逻辑线性展开,可读性和维护性大幅提升
  • 每个校验条件独立,后续新增或修改规则时,直接在对应位置调整即可,不会影响其他逻辑
  • 新增了Long.parseLong的异常捕获,避免格式错误导致的运行时异常,完善校验边界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:16