gpt4 book ai didi

java - 仅当 OkHttp 中表单字段不为 null 时才添加表单字段

转载 作者:行者123 更新时间:2023-12-02 10:24:37 24 4
gpt4 key购买 nike

有人要求我重构一些向 Web API 发出请求的代码,但我不知道它收到请求时会发生什么。我只需要清理发出请求的代码即可。我现在有这个:

FormBody formBody = new FormBody.Builder()
.add("task", task.get("task"))
.add("status", task.get("status"))
.add("spent_time", task.get("spentTime"))
.add("impediments", task.get("impediments"))
.add("reoccurring", String.valueOf(task.get("reoccurring")))
.build();
return new OkHttpClient().newCall(
new Request.Builder()
.url(buildUrl("/activities/" + task.get("id")))
.method("POST", formBody)
.header("Accept", "application/json")
.build()

最初,该函数被拆分为另外三个函数。

  • 一个 URL 调用,具有 taskstatus 形式
  • 另一个具有 spent_timeimpediments 的网址调用
  • 然后另一个网址调用仅具有重复发生

但是由于它们都属于同一个 url,所以我决定将它们组合成一个函数,因为我有一个想法。虽然我的想法似乎有些不足。我该如何做到这一点,以便如果(例如)taskstatusreoccurringnull,那么它只会创建一个只有spent_timeimpediments的表单?

最佳答案

看起来您的 task 变量是某种具有 String 键和 Object 值的映射。这是您的解决方案:

Builder builder = new FormBody.Builder();
String[] names = { "task", "status", "reoccurring", "spent_time", "impediments" };
for (String name : names) {
Object value = task.get(name);
if (value != null)
builder.add(name, value instanceof String ? (String) value : String.valueOf(value));
}

FormBody formBody = builder.build();

这会迭代您的所有表单键,并在将它们添加到表单构建器之前检查这些值是否为空。

如果您愿意,可以将其更改为使用 Streams ,这可能更高效、更短。

关于java - 仅当 OkHttp 中表单字段不为 null 时才添加表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com