SpringMVC參數(shù)接收不到

  1. 后臺(tái)直接接收或通過getRequestParmeter()獲取,前端用contentType: application/x-www-form-urlencoded
var data = {id:7,audit_content:"123"};
$.ajax({
    type: "POST",
    url: "/method",
    data:data,
    contentType: "application/json;charset=utf-8",
    success: function (result) {
        $("#my_result").html(JSON.stringify(result));
    },
    error: function () {
        console.log("shibai")
    }
});
  1. 后臺(tái)不是接收單個(gè)字符串拯勉,而是一個(gè)實(shí)體類@RequestBody Body body,前端用contentType: "application/json;charset=utf-8"
    這樣java后臺(tái)會(huì)得到一個(gè)有id和show_status屬性的Body類,注意一定要JSON.stringify(data)憔购,不能直接傳data
var data = {"id": i, "show_status":0};
        $.ajax({
            type: "POST",
            url: "/method2",
            data: JSON.stringify(data),
            contentType: "application/json;charset=utf-8",
            success: function (result) {
                $("#my_result").html(JSON.stringify(result));
            },
            error: function () {
                console.log("shibai")
            }
        });

當(dāng)后臺(tái)通過JavaBean對(duì)象接收參數(shù)時(shí),必須制定method參數(shù).

關(guān)于Form宫峦,你要了解的內(nèi)容

首先,明確下<form>標(biāo)簽的屬性玫鸟。最重要的有三個(gè)屬性:method导绷、enctypeaction屎飘。

  1. 關(guān)于method妥曲,通常取值為GET贾费、POST。默認(rèn)GET
  2. 關(guān)于action檐盟,為表單提交到的服務(wù)器地址
  3. 關(guān)于enctype褂萧,通常取值為:application/x-www-form-urlencodedmultipart/form-data遵堵、text/plain箱玷。默認(rèn)application/x-www-form-urlencoded

application/x-www-form-urlencoded

當(dāng)我們的表單中只包含文本數(shù)據(jù),并且采用默認(rèn)形式的enctype的時(shí)候陌宿,采用GET锡足、POST的差別僅在于請(qǐng)求內(nèi)容的存放位置。而請(qǐng)求內(nèi)容均為根據(jù)form中所有表單控件的name值與value構(gòu)成的key1=value1&key2=value2這樣的形式壳坪。

當(dāng)采用GET提交的方式舶得。GET請(qǐng)求會(huì)附加在URL中。POST請(qǐng)求則附加在請(qǐng)求體中爽蝴。

如果是中文內(nèi)容的請(qǐng)求沐批,還需注意編碼問題。在Tomcat7中URL會(huì)默認(rèn)編碼為ISO8859-1蝎亚,而在Tomcat8中則默認(rèn)為UTF-8九孩,這也是曾經(jīng)踩過的一個(gè)坑。

前臺(tái)Html代碼:

<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <%-- 如果不寫enctype发框,則默認(rèn)enctype=application/x-www-form-urlencoded --%>
        <form method="post" action="/form/submit1">
            <input name="username1" value="" type="text">
            <input name="username2" value="" type="text">
            <input type="submit" value="submit">
        </form>
    </body>
</html>

后臺(tái)接收代碼:

@RequestMapping(value = "/submit1", method = RequestMethod.POST)
@ResponseBody
public String submit1_Get(User user) {
    System.out.println(user.getUsername1());
    System.out.println(user.getUsername2());
    return "ok";
}

關(guān)于后臺(tái)的接收躺彬,我們可以采用@RequstParam接收,或者直接用Java Pojo接收梅惯,更復(fù)雜的接收情況宪拥,可以參考這篇博文: [Spring MVC] - SpringMVC的各種參數(shù)綁定方式

multipart/form-data

當(dāng)我們需要上傳文件的時(shí)候,必須使用這個(gè)屬性铣减。

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA

------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"

title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png

PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

上述代碼為一個(gè)請(qǐng)求的例子她君。首先生成了一個(gè) boundary 用于分割不同的字段,為了避免與正文內(nèi)容重復(fù)葫哗,boundary 很長(zhǎng)很復(fù)雜缔刹。然后 Content-Type 里指明了數(shù)據(jù)是以 mutipart/form-data 來編碼,本次請(qǐng)求的 boundary 是什么內(nèi)容劣针。消息主體里按照字段個(gè)數(shù)又分為多個(gè)結(jié)構(gòu)類似的部分桨螺,每部分都是以 –boundary 開始,緊接著內(nèi)容描述信息酿秸,然后是回車灭翔,最后是字段具體內(nèi)容(文本或二進(jìn)制)。如果傳輸?shù)氖俏募€要包含文件名和文件類型信息肝箱。消息主體最后以 –boundary– 標(biāo)示結(jié)束哄褒。關(guān)于 mutipart/form-data 的詳細(xì)定義,請(qǐng)前往 rfc1867 查看煌张。

由于涉及到文件上傳操作呐赡,所以我們采用POST提交的方式。 前臺(tái)代碼:

<html lang="zh-CN">
<head>
    <meta charset="utf-8">
</head>
<body>
    <form method="post" enctype="multipart/form-data" action="/form/submit2">
        <input name="username1" value="" type="text">
        <input name="username2" value="" type="text">
        <input type="file" name="image">
        <input type="submit" value="submit">
    </form>
</body>
</html>

后臺(tái)代碼:

@RequestMapping(value = "/submit2", method = RequestMethod.POST)
@ResponseBody
public String submit2(User user, @RequestParam("image") MultipartFile file) {
    System.out.println(user.getUsername1());
    System.out.println(user.getUsername2());
    System.out.println(file.getSize());
    return "ok";
}

當(dāng)我們使用SpringMVC提供的MultipartFile時(shí)骏融,需要在配置文件中對(duì)文件上傳的要求進(jìn)行配置

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="104857600"/>
        <property name="maxInMemorySize" value="4096"/>
</bean>

或者我們可以使用最原始的方法链嘀,獲取HttpServletRequest進(jìn)行操作,將request轉(zhuǎn)為MultipartHttpServletRequest

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
multipartRequest.getParameter("image");

更復(fù)雜的情況是:關(guān)于前臺(tái)上傳的數(shù)據(jù)不是簡(jiǎn)單的表單控件的value值档玻,可能需要拼接怀泊、轉(zhuǎn)換操作,這時(shí)我們可以使用HTML5中的FormData解決误趴,具體用法霹琼,大家可自行Google解決

application/json

由于ajax 的大行其道,越來越多的請(qǐng)求帶有該形式凉当,表示向服務(wù)器發(fā)送一個(gè)Json枣申,例如:

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8

{"title":"test","sub":[1,2,3]

前臺(tái)代碼:

<html lang="zh-CN">
<head>
    <meta charset="utf-8">
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script>
    data = {};
    data["username1"] = "haha";
    data["username2"] = "hahafdf";
    $.ajax({
        "url": "/form/submit3",
        "type": "POST",
        "data": JSON.stringify(data),
        "dataType":"json",
        "contentType":"application/json;charset=UTF-8",
        "success": function () {
            alert("success");
        },
        "error": function () {
            alert("error");
        }
    });
</script>
</body>
</html>

需要注意的地方是,需要寫上contentType看杭,以及Json對(duì)象必須轉(zhuǎn)為字符串格式 后臺(tái)代碼:

@RequestMapping(value = "/submit3", method = RequestMethod.POST)
@ResponseBody
public String submit3(@RequestBody User user) {
    System.out.println(user.getUsername1());
    System.out.println(user.getUsername2());
    return "{}";
}

SpringMVC中接收一個(gè)Json采用RequestBody忠藤,不能是RequestParam這一點(diǎn)非常重要,也就是說這兩個(gè)注解不能同時(shí)存在楼雹。

以上模孩。

Code Github

Reference

http://tim-fly.iteye.com/blog/2340858

http://www.cnblogs.com/HD/p/4107674.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市烘豹,隨后出現(xiàn)的幾起案子瓜贾,更是在濱河造成了極大的恐慌诺祸,老刑警劉巖携悯,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異筷笨,居然都是意外死亡憔鬼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門胃夏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轴或,“玉大人,你說我怎么就攤上這事仰禀≌昭悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵答恶,是天一觀的道長(zhǎng)饺蚊。 經(jīng)常有香客問我萍诱,道長(zhǎng),這世上最難降的妖魔是什么污呼? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任裕坊,我火速辦了婚禮,結(jié)果婚禮上燕酷,老公的妹妹穿的比我還像新娘籍凝。我一直安慰自己,他們只是感情好苗缩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布饵蒂。 她就那樣靜靜地躺著,像睡著了一般挤渐。 火紅的嫁衣襯著肌膚如雪苹享。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天浴麻,我揣著相機(jī)與錄音得问,去河邊找鬼。 笑死软免,一個(gè)胖子當(dāng)著我的面吹牛宫纬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膏萧,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼漓骚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了榛泛?” 一聲冷哼從身側(cè)響起蝌蹂,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曹锨,沒想到半個(gè)月后孤个,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沛简,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年齐鲤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椒楣。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡给郊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捧灰,到底是詐尸還是另有隱情淆九,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站炭庙,受9級(jí)特大地震影響跪另,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煤搜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一免绿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧擦盾,春花似錦嘲驾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腐碱,卻和暖如春誊垢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背症见。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工喂走, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谋作。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓芋肠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親遵蚜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帖池,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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