retrofit 如何post json給服務(wù)端

  • 需求:
    開發(fā)新項目時当宴,拿到接口文檔裁厅,需要請求消息體是json類型的

可能你這么寫過post:

interface NService {
        @FormUrlEncoded
        @POST("alarmclock/add.json")
        Call<ResponseBody> getResult(@FieldMap Map<String, Object> params);
    }
Retrofit retrofit = new Retrofit.Builder().baseUrl(URL).client(client).build();
     NService nService = retrofit.create(NService.class);
     Map<String, Object> params = new HashMap<>();
     params.put("id", "123");
     params.put("name", "ksi");

     Call<ResponseBody> call = nService.getResult(params);
     call.enqueue(new Callback<ResponseBody>() {
         @Override
         public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {

         }

         @Override
         public void onFailure(Call<ResponseBody> call, Throwable t) {

         }
     });

這是表單提交搪搏,你提交上去的其實是id=123&name=ksi這么個東西。
如果要提交的是json那么自然要改變請求體了

好堵幽,有的同學(xué)可能會搜索以下問題:怎么查看/更改/添加請求頭、請求體弹澎、響應(yīng)體朴下?
我的版本是:retrofit2.1.0,2.0以前的做法可能不一樣苦蒿。

首先殴胧,在你的build.gradle下面依賴這玩意
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
然后配置client,添加攔截器佩迟,第一個攔截器是用于添加請求頭的团滥,第二個就是打印日志了

OkHttpClient client = new OkHttpClient().newBuilder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Chain chain) throws IOException {
                        Request request = chain.request().newBuilder()
                                .addHeader("creater_oid", "123411") //這里就是添加一個請求頭
                                .build();

//                        Buffer buffer = new Buffer();       不依賴logging,用這三行也能打印出請求體
//                        request.body().writeTo(buffer);
//                        Log.d(getClass().getSimpleName(), "intercept: " + buffer.readUtf8());

                        return chain.proceed(request);
                    } //下面是關(guān)鍵代碼
                }).addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
                .build();

好报强,我們來干正經(jīng)事了灸姊,json格式的請求,參數(shù)注解用@Body

interface ApiService {
        @POST("add.json")
        Call<ResponseBody> add(@Body RequestBody body);
    }
Retrofit retrofit = new Retrofit.Builder().baseUrl(URL).client(client).build();
        ApiService apiService = retrofit.create(ApiService.class);

//new JSONObject里的getMap()方法就是返回一個map秉溉,里面包含了你要傳給服務(wù)器的各個鍵值對力惯,然后根據(jù)接口文檔的請求格式,直接拼接上相應(yīng)的東西就行了
//比如{"data":{這里面是參數(shù)}}召嘶,那就在外面拼上大括號和"data"好了
        RequestBody requestBody = RequestBody.create(MediaType.parse("Content-Type, application/json"),
                                   "{\"data\":"+new JSONObject(getMap()).toString()+"}");
        Call<ResponseBody> call = apiService.add(requestBody);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
                Log.d(getClass().getSimpleName(), "onResponse: ----" + response.body().string());
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d(getClass().getSimpleName(), "onFailure: ------" + t.toString());
            }
        });

OK父晶,大功告成,來看看打印結(jié)果吧

QQ截圖20160722012756.png

看到第三行了么弄跌,那就是自定義添加的請求頭甲喝,第四行就是json格式的請求體了
<---200 OK下面是響應(yīng)體。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碟绑,一起剝皮案震驚了整個濱河市俺猿,隨后出現(xiàn)的幾起案子茎匠,更是在濱河造成了極大的恐慌,老刑警劉巖押袍,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵冒,死亡現(xiàn)場離奇詭異,居然都是意外死亡谊惭,警方通過查閱死者的電腦和手機汽馋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圈盔,“玉大人豹芯,你說我怎么就攤上這事∏茫” “怎么了铁蹈?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長众眨。 經(jīng)常有香客問我握牧,道長,這世上最難降的妖魔是什么娩梨? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任沿腰,我火速辦了婚禮,結(jié)果婚禮上狈定,老公的妹妹穿的比我還像新娘颂龙。我一直安慰自己,他們只是感情好纽什,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布措嵌。 她就那樣靜靜地躺著,像睡著了一般稿湿。 火紅的嫁衣襯著肌膚如雪铅匹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天饺藤,我揣著相機與錄音包斑,去河邊找鬼。 笑死涕俗,一個胖子當(dāng)著我的面吹牛罗丰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播再姑,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼萌抵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绍填,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤霎桅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讨永,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滔驶,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年卿闹,在試婚紗的時候發(fā)現(xiàn)自己被綠了揭糕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锻霎,死狀恐怖著角,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旋恼,我是刑警寧澤吏口,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站冰更,受9級特大地震影響锨侯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冬殃,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叁怪。 院中可真熱鬧审葬,春花似錦、人聲如沸奕谭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽血柳。三九已至官册,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間难捌,已是汗流浹背膝宁。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留根吁,地道東北人员淫。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像击敌,于是被迫代替她去往敵國和親介返。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)圣蝎,斷路器刃宵,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • JSON JSON和XML都是需要解析的 JSON是一種輕量級的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 1,853評論 2 10
  • 本文依照 知識共享許可協(xié)議(署名-非商業(yè)性使用-禁止演繹) 發(fā)布徘公。 編寫HTTP 服務(wù)器與客戶端 Vert.x讓編...
    半枚荔枝閱讀 3,958評論 0 5
  • API定義規(guī)范 本規(guī)范設(shè)計基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高牲证,建議使用雙通...
    有涯逐無涯閱讀 2,537評論 0 6
  • 現(xiàn)在做微商還行不行?尤其是現(xiàn)在國家都在大力的倡導(dǎo)個人創(chuàng)業(yè)步淹,現(xiàn)在的個體戶營業(yè)執(zhí)照的申請已經(jīng)是零費用从隆,而且在稅收上給予...
    南寧進口倉閱讀 196評論 0 0