我一直被要求重构一些向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()
最初,此功能被拆分为另外三个功能。
task
和status
的url呼叫spent_time
和impediments
的网址调用reoccurring
但是由于它们都属于同一个URL,所以我决定将它们组合为一个函数,因为我有一个主意。虽然看来我的想法还不够。我要如何做到,如果task
,status
和reoccurring
是null
,那么它只会创建仅具有< / em> spent_time
和impediments
?
答案 0 :(得分:1)
看起来您的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,这样可能会更高效,更短。