Java api 返回可选

标签 java rest option-type

我正在与 API 进行通信,并且使用了 Optional 类。但我觉得错误处理可以更优雅,因此任何有关如何改进这一点的建议都会受到欢迎。我是否还缺少实际 api 调用中的异常处理?

public Optional<Account> getGreenqloudAccount(String accountUUid) {
    System.out.println("tmplog: GreenqloudAccountDao->getGreenqloudAccount");
    for (Account account : apiClient.accountList()) {
        if (account.getUuid().equals(accountUUid)) {
            System.out.println("getGreenqloudAccount, account: " + account.toString());
            return Optional.of(account);
        }
    }
    return Optional.empty();
}

public Optional<String> getMarketplaceCustomerIdByUsername(String username) {
    if (username == null || username.equals("")) {
        return Optional.empty();
    }
    AwsMarketplace marketplaceData = apiClient.getMarketplaceData(getKeys(username));
    if (marketplaceData == null) {
        return Optional.empty();
    }
    return Optional.ofNullable(marketplaceData.getObjects().get(0).getCustomerId());
}

private Pair getKeys(String username) {
    GetKeys getKeys = apiClient.getKeys(username);
    return new Pair(getKeys.getApiPrivateKey(), getKeys.getApiPublicKey());
}

最佳答案

代码的主要问题:您将大量非常不同的结果放入同一个“桶”中。

getMarketplaceCustomerIdByUsername() 例如,在以下情况下返回空可选:

  • 用户名为空
  • 用户名是“”(想想“”意味着空,但“”不是空?!)
  • 找不到给定用户的 AwsMarketplace 实例

如前所述,这些是非常不同的问题。第一个可能表明:提供的用户名不正确,因此您应该告诉您的用户这一点。最后一个意思是:“有些可疑,可能用户未知,或者发生了其他事情”。

因此:考虑不要将不同的结果简化为空的Optional。而是考虑抛出(不同的?)异常。当“无结果”是操作的有效结果时,可以使用Optional。但“没有结果,因为用户名错误”感觉不是一个有效的结果。

关于Java api 返回可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840839/

相关文章:

java - Android使用本地CSS显示html字符串

javascript - 将 API 更新信息推送到正在运行的客户端的最佳做法是什么?

java - 通过通知栏恢复应用程序

java - Android:如何永久且完全不显示 EditText 的默认软键盘?

java - 获取SerializationService,通过序列化进行克隆

spring - Jersey ExceptionMapper 不映射异常

node.js - 如何通过 Nodejs Express 应用程序调用 API 获取 png 图像

arrays - 如何将可选整数数组加入字符串?

C++ 等价于 Rust 的 Result<T, E> 类型?

java-8 - 使用选项重写 if else null 检查