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

如何更简洁地实现服务方法中的用户输入校验?

优化Java服务方法代码的几种方案

你的代码逻辑清晰但存在重复校验和嵌套层级的问题,以下是几种更简洁且易维护的优化方案:

1. 提取通用校验方法,消除重复代码

原代码中多次重复if (xxx == null) throw new CustomHandledException("example");的逻辑,把这部分抽成通用方法,既能精简代码,也方便后续统一修改校验规则:

// 可以放在当前类的私有方法,或者单独的工具类中
private void checkNotNull(Object obj) {
    if (obj == null) {
        throw new CustomHandledException("example");
    }
}

public void exampleMethod(final UserDto user, String sthElse) {
    checkNotNull(user.getId());
    checkNotNull(sthElse);

    GetUserResponseDto getUserResponse = client.getUserById(user.getId(), country);

    if (getUserResponse == null) {
        checkNotNull(user.getGivenName());
        checkNotNull(user.getEmail());
        CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user);
        client.createUser(createUserBody);
        return;
    }

    if (!user.getLocale().equals(getUserResponse.getUser().getProfile().getLocale())) {
        client.updateUser(user);
    }
}

2. 扁平化嵌套逻辑,减少缩进层级

把嵌套的if提前校验抛出,同时调整后续的分支结构,让代码执行路径更线性,避免过多的提前return:

private void checkNotNull(Object obj) {
    if (obj == null) {
        throw new CustomHandledException("example");
    }
}

public void exampleMethod(final UserDto user, String sthElse) {
    checkNotNull(user.getId());
    checkNotNull(sthElse);

    GetUserResponseDto getUserResponse = client.getUserById(user.getId(), country);

    if (getUserResponse == null) {
        checkNotNull(user.getGivenName());
        checkNotNull(user.getEmail());
        CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user);
        client.createUser(createUserBody);
    } else {
        if (!user.getLocale().equals(getUserResponse.getUser().getProfile().getLocale())) {
            client.updateUser(user);
        }
    }
}

3. 使用Optional处理空值,优化null判断

利用Java 8+的Optional类,更优雅地处理空值场景,避免显式的== null判断:

private void checkNotNull(Object obj) {
    if (obj == null) {
        throw new CustomHandledException("example");
    }
}

public void exampleMethod(final UserDto user, String sthElse) {
    checkNotNull(user.getId());
    checkNotNull(sthElse);

    Optional<GetUserResponseDto> userResponseOpt = Optional.ofNullable(client.getUserById(user.getId(), country));

    userResponseOpt.ifPresentOrElse(
        response -> {
            if (!user.getLocale().equals(response.getUser().getProfile().getLocale())) {
                client.updateUser(user);
            }
        },
        () -> {
            checkNotNull(user.getGivenName());
            checkNotNull(user.getEmail());
            CreateUserRequestDto createUserBody = UserMapper.toCreateBody(user);
            client.createUser(createUserBody);
        }
    );
}

可选优化:精准异常提示

如果需要区分不同校验场景的错误信息,可以给校验方法增加参数,让异常提示更清晰:

private void checkNotNull(Object obj, String errorMsg) {
    if (obj == null) {
        throw new CustomHandledException(errorMsg);
    }
}

// 调用示例
checkNotNull(user.getId(), "用户ID不能为空");
checkNotNull(sthElse, "额外参数不能为空");
checkNotNull(user.getGivenName(), "用户姓名不能为空");
checkNotNull(user.getEmail(), "用户邮箱不能为空");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:53:25