Retrofit 2.0使用(2)如何使用@Body的形式發送Post

在使用Retrofit的時候若是隻是有幾個參數咱們能夠用@Querry的形式,而後須要使用','隔開git

可是在須要@Querry的參數多了以後,若是再用上面的方式就會形成參數寫了一大堆的麻煩事github

因此Retrofit就提供了@Body 的形式來幫助咱們處理這種事務json

下面看代碼吧服務器

public interface LoginApiService {

    @Headers({"Content-Type: application/json","Accept: application/json"})
    @POST("server?")
    Observable<GetLoginJson> Login(@Body RequestBody body);

}

這是他的API接口,須要在開頭@Header 而後後面的值。。。。。( ▼-▼ )!講道理我如今還沒弄明白爲啥這樣寫,有啥規律可循,後面搞懂了再來補上app

補上:!post

Content-Type 表示請求信息的格式,這個在Spring MVC裏有應用
而後application/json 就表明json數據格式,固然還有不少其餘的格式,這個有興趣能夠去查閱一下

 

/***20161125修改**/this

無心間在簡書上找到了@Header和@Headers的說明spa

@Header:header處理,不能被互相覆蓋,用於修飾參數,code

//動態設置Header值
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

@Headers 用於修飾方法,用於設置多個Header值:server

@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

。。。。。( ▼-▼ )!表示仍是不懂Headers的寫法啊

引用自簡書做者@BoBoMEe

/***20161125編輯 end**/

而後你須要作的是封裝一個Post請求的類

    public class PostInfo {
    private PostInfoBean postInfoBean;

    public PostInfoBean getPostInfoBean() {
        return postInfoBean;
    }

    public void setPostInfoBean(PostInfoBean postInfoBean) {
        this.postInfoBean = postInfoBean;
    }

    public class PostInfoBean{
        private String command;
        private String posModel;
        private String posSn;
        private String posMac;
        private String userId;
        private String passWord;

        /**get 省略*/
    
        /**set 省略*/
}

而後使用Retrofit的時候在你實例了ApiService那個接口以後,還須要實例化一個請求Header

實例化完成以後因爲我這邊服務器接收的是Json類型的請求,我還須要用Gson將他轉成Json字符串的形式,而後再(很重要)經過RequestBody(包含於Okhttp包中)類轉化爲RequestBody,以後再調用API接口便可

 LoginApiService loginApiService = mRetrofit.create(LoginApiService.class);

        PostInfo postInfo = new PostInfo();
        PostInfo.PostInfoBean postInfoBean = postInfo.new PostInfoBean();
        postInfoBean.setCommand("xxx");
        postInfoBean.setPosModel("xx");
        postInfoBean.setPosSn(getPhoneSn());
        postInfoBean.setPosMac(getPhoneMac());
        postInfoBean.setUserId("xx");
        postInfoBean.setPassWord("xx");
        postInfoBean.setVersion("xx");

        postInfo.setPostInfoBean(postInfoBean);

        Gson gson = new Gson();
        String postInfoStr = gson.toJson(postInfoBean);

        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),postInfoStr);

       loginApiService.Login(body)             .xxx.xxx;
相關文章
相關標籤/搜索