Java 仅当表单字段在OkHttp中不为空时添加表单字段
我被要求重构一些向web API发出请求的代码,我不知道当它收到请求时会发生什么。我只需要清理发出请求的代码。我现在有这个:Java 仅当表单字段在OkHttp中不为空时添加表单字段,java,okhttp,okhttp3,Java,Okhttp,Okhttp3,我被要求重构一些向web API发出请求的代码,我不知道当它收到请求时会发生什么。我只需要清理发出请求的代码。我现在有这个: FormBody formBody = new FormBody.Builder() .add("task", task.get("task")) .add("status", task.get("status")) .add("spent_time", task.get("spentTime")) .add
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调用,用于创建表单
和任务
状态
- 另一个url调用,用于使用
时间
和
障碍
- 然后是另一个url调用,只允许重复出现
但由于它们都属于同一个url,我决定将它们合并为一个函数,因为我有一个想法。虽然我的想法似乎有点落伍。如果(例如,
任务
、状态
和重复
都是空的
,那么它将只创建一个只有花费的时间
和障碍
的表单。看起来您的任务
变量是一个具有字符串键和对象值的某种映射。以下是您的解决方案:
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();
这将遍历所有表单键,并在将值添加到表单生成器之前检查值是否为null
如果您愿意,您可以将其更改为使用,这可能会更高效、更短。Neeto!我认为okhttp的FormBody.Builder由于包私有内容而无法实例化。我的错是误解了它。有了您的解决方案,我将只使用
bodyBuilder.add(name,String.valueOf(value)
将其添加到builder中。谢谢,伙计!@RigoSarmiento,没问题。随时乐意帮助。