最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

@RequestBody注解Ajax post json List集合數(shù)據(jù)請求400/415的處理

 更新時(shí)間:2022年10月31日 11:11:13   作者:菜菜小智  
這篇文章主要介紹了@RequestBody注解Ajax post json List集合數(shù)據(jù)請求400/415的處理方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@RequestBody注解Ajax post json List集合數(shù)據(jù)請求400/415

該問題出現(xiàn)在ajax發(fā)送post請求時(shí)返回錯(cuò)誤代碼,后臺不報(bào)任何錯(cuò)誤

問題原因和解決方法:

1.post發(fā)送的json數(shù)據(jù)錯(cuò)誤

@RequestBody注解是把post請求的整體數(shù)據(jù)進(jìn)行處理,@RequestBody后面的參數(shù)是和json數(shù)據(jù)沒有關(guān)系的,比如

@RequestBody List<CourseVo> courseVos;
//此句的courseVos不用在json數(shù)據(jù)中包含!?。。。?/pre>

發(fā)送該數(shù)據(jù)的js為下

$.ajax({
? ? ?type: "post",
? ? ?url: '/beansOffice/addCourseData',
? ? ?dataType:"json",
? ? ?contentType:"application/json",
? ? ?data: JSON.stringify(this.courseView),//此塊注意

? ? ?//注意數(shù)據(jù)是data: JSON.stringify(this.courseView) ??
? ? ?//而不是data: JSON.stringify({courseVos:this.courseView})
? ? ?//兩者區(qū)別就是有沒有把@RequestBody注解后的“courseVos”當(dāng)為json數(shù)據(jù)

? ? ?success: function (data) {
? ? ? ? if (data.status == 200 && data.body.code == 200)
? ? ? ? ? ? ? alert("提交成功!");
? ? ?}
});

2.Spring或maven版本過低導(dǎo)致jackson包沒有導(dǎo)入

jackson是spring默認(rèn)的json處理工具,沒有該包則會(huì)對一些復(fù)雜對象會(huì)處理異常

依賴包為下(當(dāng)前最新):

<dependency>
? ? <groupId>org.codehaus.jackson</groupId>
? ? <artifactId>jackson-core-asl</artifactId>
? ? <version>1.9.13</version>
</dependency>
<dependency>
? ? <groupId>org.codehaus.jackson</groupId>
? ? <artifactId>jackson-mapper-asl</artifactId>
? ? <version>1.9.8</version>
</dependency>

3.json數(shù)據(jù)和對象數(shù)據(jù)轉(zhuǎn)換出問題

這個(gè)問題很容易出,由于異常被吃掉很不容易發(fā)現(xiàn)

比如對象中定義數(shù)據(jù) int a;但是你有可能默認(rèn)值是“”,即空字符串,則也會(huì)直接報(bào)400錯(cuò)誤而后臺沒有任何異常     

還有一些比如時(shí)間類型(data)、布爾(boolean)或自定義類型,建議所有都使用String,自己手動(dòng)在后臺轉(zhuǎn)換,這樣報(bào)錯(cuò)也會(huì)被發(fā)現(xiàn)

$.ajax 中關(guān)于get、post 與@RequestBody和@RequestParam使用注意

1、在GET請求中,不能使用@RequestBody。因?yàn)橥鵊ET請求里加body是不符合規(guī)范的,不保證所有的實(shí)現(xiàn)都支持,所以在ajax 里注意請求方式如果用 get 后端參數(shù)不能用 @RequestBody 來接收它。(所以本人在 ajax ,或者什么表單,一般愛好用post,既安全,又能解決中文亂碼問題)

2、在POST請求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,對于參數(shù)轉(zhuǎn)化的配置必須統(tǒng)一??梢允褂枚鄠€(gè)@RequestParam獲取數(shù)據(jù),@RequestBody不可以只能一個(gè)。

3、ajax請求默認(rèn) contentType=application/x-www-form-urlencoded;charset:utf-8,此格式為表單提交格式,數(shù)據(jù)為key1=value1&key2=value2格式

不使用contentType:‘application/json;charset=UTF-8’, 則data里可以是json對象的屬性

$.ajax({
?? ?url: "",
?? ?type: "POST",
?? ?dataType: "JSON",
?? ?data: {"id": 1},
?? ?async: false,
?? ?success: function(){
?? ?
?? ?}
});

注意:data 右邊花括號外邊是沒有雙引號或引號的 “” ‘’,所以data叫做 json對象,而不是叫json字符串,里面是其屬性。(所以上面是不使用contentType:'application/json;charset=UTF-8’的例子)

使用contentType:'application/json;charset=UTF-8’的例子:就得使用json字符串而非 JSON 對象了

$.ajax({
?? ?url: "",
?? ?type: "POST",
?? ?dataType: "JSON",
?? ?contentType: "application/json",
?? ?data: "{'id': "+ 1 + "}",
?? ?async: false,
?? ?success: function(){
?? ?
?? ?}
});

data 右邊括號外有引號的叫 JSON 字符串

前端發(fā)送復(fù)雜JSON數(shù)據(jù),后端使用@RequestBody接收

舉例子:

$.ajax({
?? ?url: "",
?? ?type: "POST",
?? ?dataType: "JSON",
?? ?contentType: "application/json;charset=UTF-8",
?? ?data: JSON.stringify({
?? ??? ?id:"1"
?? ?}),
?? ?async: false,
?? ?success: function(){
?? ?
?? ?}
});

后端用 @RequestBody 來接收傳過來的json字符串

注意:

  • JSON.stringify 是從一個(gè)對象中解析出字符串
  • JSON.parse是從一個(gè)字符串中解析出json(鍵值對)
  • 使用:contentType:‘application/json;charset=UTF-8’, 配合:data:JSON.stringify()

@RequestParam 介紹

主要用來接收GET請求拼接在URL后的參數(shù),或者是POST傳遞,且Content-type為x-www-form-urlencoded方式。

因?yàn)椴还苁荊ET方式還是用x-www-form-urlencoded方式傳遞,參數(shù)都是以鍵值對方式拼接的,然后經(jīng)過URLencoded編碼,傳遞給服務(wù)端。

@RequestParam 只能接收簡單參數(shù)類型,復(fù)雜的參數(shù)類型要用 @RequestBody 來接收,或者不加注解來接收。

@RequestBody 介紹

使用 @RequestBody 該注解,前端請求只能為 POST,因?yàn)樵撟⒔馐菑恼埱篌w中獲得對象的。且請求頭中的Content-type一般為application/json 方式。

所以使用該注解能夠接收 JSON 格式的數(shù)據(jù),并且能把接收到的 JSON 數(shù)據(jù)綁定到 JAVA 對象中。復(fù)雜對象包括List,實(shí)體類,Map對象等。

在用該注解的時(shí)候有兩個(gè)注意事項(xiàng):

  • 一個(gè)方法中只能有一個(gè)@RequestBody注解,但是@RequestBody注解可以和@RequestParam注解一起使用,而且@RequestParam注解一個(gè)方法中可以有多個(gè)。
  • @RequestBody注解的參數(shù)類型可以是復(fù)雜對象類。

不加注解接收

  • 不加注解接收參數(shù),參數(shù)類型可以為簡單類型,也可以為復(fù)雜類型(JAVA對象等,前端傳遞的參數(shù)會(huì)和類中的屬性名對應(yīng)并且綁定)。也就是兩種類型都可接收。
  • 而且GET請求和POST請求也都能接收到參數(shù)。
  • 但是POST請求時(shí),和@RequestParam注解一樣,Content-type只能為x-www-form-urlencoded。
  • 不加注解可以接收復(fù)雜對象,但是不能接收Map類型的對象。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

长岭县| 建始县| 阿拉善左旗| 中方县| 深水埗区| 乳山市| 旬阳县| 西青区| 甘泉县| 横山县| 临江市| 油尖旺区| 中江县| 十堰市| 丰台区| 沙河市| 开江县| 平定县| 兖州市| 简阳市| 浑源县| 商丘市| 安阳县| 丰宁| 巫山县| 固原市| 枣庄市| 邻水| 稻城县| 应用必备| 运城市| 襄垣县| 贡山| 冀州市| 信阳市| 双鸭山市| 沂水县| 涞水县| 台南县| 微博| 苍溪县|