公司項目後臺請求,需要上傳json格式的參數,本打算直接使用鴻洋(博客)大大封裝的okhttp-utils,但是發現大大雖然封裝了表單的post,但是沒有json的(可能我眼瞎沒看見),所以還是需要根據公司具體的參數結構,進行二次封裝。
比如參數如下:
{
args: {
pub_param:{
"username":"old wang",
"pwd":"4cf7f8flf9fajl0fa1"
}
pri_param:{
"appversion":"2.0.0",
"token":"xxxxxxxx",
"userid":12345,
"imei":"xxxxxxxxxxxxxxxxxxxx",
}
}
}
這種情況下,參數分爲了公參和私參,私參針對每個接口都不一樣,但是公參卻相對固定。這樣就可以封裝好公參,暴露私參,每次只需要傳私參就可以。當然傳參的格式一般都是Map鍵值對,也就是說,我們也要做Map與Json之間的轉化。
關於okhttp-utils的基礎用法可以參見博客和github,我這邊就不班門弄斧。直接講如何二次封裝了。
首先裏面有個PostStringBuilder.java
public class PostStringBuilder extends OkHttpRequestBuilder<PostStringBuilder>
{
private String content;
private MediaType mediaType;
public PostStringBuilder content(String content)
{
this.content = content;
return this;
}
public PostStringBuilder mediaType(MediaType mediaType)
{
this.mediaType = mediaType;
return this;
}
@Override
public RequestCall build()
{
return new PostStringRequest(url, tag, params, headers, content, mediaType,id).build();
}
}
顧名思義,就是post string類型的參數,我們可以借用這個,做一箇中間層,將Map格式的參數,拼接成json,然後再將json轉string,對於框架的使用者,提供Map格式的參數,對於服務器,傳輸json格式的參數。
由於PostStringBuilder繼承自OkHttpRequestBuilder,所以要先改OkHttpRequestBuilder,如下: