2016年09月18日工作日志

今天遇到一個很惡心的問題卖局,從ios發(fā)過來的post請求怎么都無法識別,可是在web端發(fā)送確實(shí)很正常的茅坛。過程如下:

1.在chrome瀏覽器里隨便打開一個網(wǎng)頁案怯,F(xiàn)12打開控制臺,然后植入jquery

var fileref=document.createElement('script'); 

fileref.setAttribute("type","text/javascript"); 

fileref.setAttribute("src", 'http://libs.baidu.com/jquery/1.9.1/jquery.js'); 

document.getElementsByTagName("head")[0].appendChild(fileref); 

2.發(fā)送post請求

$.post(    
     "http://192.168.2.4/app/api/blackList/query/name",   
      {name: "王剛", currentPage: "1"},
      function (txt) {
        console.log(txt);
      }
)

返回的數(shù)據(jù)正常:


Paste_Image.png

通過打斷點(diǎn)調(diào)試發(fā)現(xiàn)江场,

ios端發(fā)來的請求>content-type:application/json
web方式發(fā)來的請求>content-type:application/x-www-form-urlencoded; charset=UTF-8

到這里纺酸,問題就好解決了,前者是一個字符串址否,可以在代碼里加上@RequestBody實(shí)現(xiàn)轉(zhuǎn)換餐蔬,同時,將web傳遞的content-type修改一下即可(不能直接使用$.post佑附,這對于開發(fā)者而言可不夠友好)

$.ajax(
  {
   type: "post",
   contentType:"application/json",
   url: "http://192.168.2.4/app/api/blackList/query/name",
   data: JSON.stringify({name:"王剛",currentPage:"1"}),
   success: function(data){
      console.log(data)
    }
 }
)

斟酌再三樊诺,決定還是保留對傳統(tǒng)web端jquery.post()方式的支持,同時支持ios序列化傳遞過來的參數(shù)音同,第一版先進(jìn)行header判斷词爬,遇到application/json的content-type,就從request取出inputstream权均,手動轉(zhuǎn)化
controller的代碼如下:

@ApiOperation(value = "姓名查詢", notes = "首次訪問時currentPage傳1")
@ApiImplicitParams({
       @ApiImplicitParam(name = "name", value = "名稱", required = true, dataType = "String"), 
       @ApiImplicitParam(name = "currentPage", value = "當(dāng)前是第幾頁", required = true, dataType = "String")})
@PostMapping(value = "/api/blackList/query/name")
public String nameQuery(BlackListParam param, HttpServletRequest request) throws IOException {
    String contentType = request.getHeader("Content-Type");
    if (contentType.endsWith("application/x-www-form-urlencoded")) {
    } else if (contentType.endsWith("application/json")) {
        String string = HttpToolkit.getContent(request.getInputStream(), "UTF-8");
        param = mapper.readValue(string, BlackListParam.class);
    }
    logger.info("進(jìn)入nameQuery,name=" + param.getName() + "&currentPage=" + param.getCurrentPage());
    int currentPageInt = Integer.parseInt(param.getCurrentPage());
    String result = blackListApiService.nameQuery(param.getName(), currentPageInt);
    return result;}

HttpToolkit里面的getContent部分的代碼:

public static String getContent(InputStream is, String charset) {
    String pageString = null;
    InputStreamReader isr = null;
    BufferedReader br = null;
    StringBuffer sb = null;
    try {
        isr = new InputStreamReader(is, charset);
        br = new BufferedReader(isr);
        sb = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
            sb.append(line + "\n");
        }
        pageString = sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (is != null){
                is.close();
            }
            if(isr!=null){
                isr.close();
            }
            if(br!=null){
                br.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        sb = null;
    }
    return pageString;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顿膨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叽赊,更是在濱河造成了極大的恐慌恋沃,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件必指,死亡現(xiàn)場離奇詭異囊咏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門梅割,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霜第,“玉大人,你說我怎么就攤上這事户辞∈睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵咆课,是天一觀的道長。 經(jīng)常有香客問我扯俱,道長书蚪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任迅栅,我火速辦了婚禮殊校,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘读存。我一直安慰自己为流,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布让簿。 她就那樣靜靜地躺著敬察,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尔当。 梳的紋絲不亂的頭發(fā)上莲祸,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機(jī)與錄音椭迎,去河邊找鬼锐帜。 笑死,一個胖子當(dāng)著我的面吹牛畜号,可吹牛的內(nèi)容都是我干的缴阎。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼简软,長吁一口氣:“原來是場噩夢啊……” “哼蛮拔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起替饿,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤语泽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后视卢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踱卵,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惋砂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒挎。...
    茶點(diǎn)故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖西饵,靈堂內(nèi)的尸體忽然破棺而出酝掩,到底是詐尸還是另有隱情,我是刑警寧澤眷柔,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布期虾,位于F島的核電站,受9級特大地震影響驯嘱,放射性物質(zhì)發(fā)生泄漏镶苞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一鞠评、第九天 我趴在偏房一處隱蔽的房頂上張望茂蚓。 院中可真熱鬧,春花似錦剃幌、人聲如沸聋涨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牍白。三九已至,卻和暖如春抖棘,著一層夾襖步出監(jiān)牢的瞬間淹朋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工钉答, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留础芍,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓数尿,卻偏偏與公主長得像仑性,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子右蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評論 2 361

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