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

使用@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑

 更新時(shí)間:2021年08月20日 08:58:21   作者:青魚(yú)入云  
這篇文章主要介紹了使用@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@RequestBody傳對(duì)象參數(shù)時(shí)碰到的坑

工作中需要使用到http接口傳一個(gè)對(duì)象數(shù)組,網(wǎng)上找到某博客:springmvc參數(shù)為對(duì)象,數(shù)組

但是測(cè)試還是不對(duì),報(bào)錯(cuò):

2019-02-21 23:44:37.168 WARN 34133 --- [nio-7001-exec-6]
.w.s.m.s.DefaultHandlerExceptionResolver :
Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException:
JSON parse error:
Can not construct instance of com.cainiao.cngdm.domain.common.Report: no String-argument constructor/factory method to deserialize from String value ('{"title":"11","note":"22","goodsList":[{"goodsNumber":"001","goodsName":"商品A"},{"goodsNumber":"002","goodsName":"商品B"}]}'); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.cainiao.cngdm.domain.common.Report: no String-argument constructor/factory method to deserialize from String value ('{"title":"11","note":"22","goodsList":[{"goodsNumber":"001","goodsName":"商品A"},{"goodsNumber":"002","goodsName":"商品B"}]}')

看樣子好像時(shí)說(shuō)少了string參數(shù)的構(gòu)造函數(shù),試過(guò)很多其他辦法還不行后,決定試一下增加一個(gè)String類(lèi)型的構(gòu)造方法,代碼如下:

public class Report  implements Serializable {
 private static final long serialVersionUID = 1L;
 String title;
 String note;
 List<Goods> goodsList;
 Report(){}
 Report(String dd) {
  Report report = JSON.parseObject(dd,Report.class);
  this.title=report.title;
  this.note=report.title;
  this.goodsList=report.goodsList;
 }
 //getter... setter...
}
public class Goods  implements Serializable {
 private static final long serialVersionUID = 1L;
 String goodsNumber;
 String goodsName;
 //getter... setter...
}

PS:@RequestBody的使用需要加載MappingJackson2HttpMessageConverter,但是SpringBoot的官方文檔提到,這個(gè)是默認(rèn)已經(jīng)加載的了,所以最后spring的配置這部分我又刪了,測(cè)試OK。

上面是測(cè)試代碼,測(cè)試代碼測(cè)通后,我的代碼還是報(bào)錯(cuò)

我的真實(shí)代碼是這樣的:

 @RequestMapping("/addReportDo")
    @ResponseBody
    public String addReportDo(String title,String note,@RequestBodyList<Goods> goodsList){
        System.out.println(report);
        return "ok";
    }

//錯(cuò)誤代碼
2019-02-22 12:05:28.498 WARN 36431 --- [nio-7001-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message:
org.springframework.http.converter.HttpMessageNotReadableException:
JSON parse error: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token;
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

大概意思是不能從這個(gè)String轉(zhuǎn)到List,也就是list對(duì)應(yīng)jsonArray格式不對(duì),使用對(duì)象像上面一樣封裝起來(lái)Report就OK了。

也就是下面的區(qū)別:

{goodsList: [{
     goodsNumber: "001",
     goodsName: "商品A"
 },{
     goodsNumber: "002",
     goodsName: "商品B"
 }]
}
{[{
     goodsNumber: "001",
     goodsName: "商品A"
 },{
     goodsNumber: "002",
     goodsName: "商品B"
 }]
}

由于時(shí)間原因,只是記錄一下現(xiàn)象和解決方案,具體原因還沒(méi)有細(xì)看springMVC里的json處理是怎么進(jìn)行的。

@RequestBody 的正確使用

@RequestBody接收的是一個(gè)Json對(duì)象

一直在調(diào)試代碼都沒(méi)有成功,后來(lái)發(fā)現(xiàn),其實(shí) @RequestBody接收的是一個(gè)Json對(duì)象的字符串,而不是一個(gè)Json對(duì)象。然而在ajax請(qǐng)求往往傳的都是Json對(duì)象,后來(lái)發(fā)現(xiàn)用 JSON.stringify(data)的方式就能將對(duì)象變成字符串。

同時(shí)ajax請(qǐng)求的時(shí)候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個(gè)對(duì)象或者List傳到Java端,使用@RequestBody即可綁定對(duì)象或者List.

@RequestBody的使用

需要加載MappingJackson2HttpMessageConverter,但是SpringBoot的官方文檔提到,這個(gè)是默認(rèn)已經(jīng)加載的了,而且json字符串和javabean也沒(méi)有書(shū)寫(xiě)的錯(cuò)誤

直接通過(guò)瀏覽器輸入url時(shí),@RequestBody獲取不到j(luò)son對(duì)象,需要用java編程或者基于ajax的方法請(qǐng)求,將Content-Type設(shè)置為application/json

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

相關(guān)文章

  • spring boot讀取Excel操作示例

    spring boot讀取Excel操作示例

    這篇文章主要介紹了spring boot讀取Excel操作,結(jié)合實(shí)例形式詳細(xì)分析了spring boot解析、讀取Excel相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java RPC框架如何實(shí)現(xiàn)客戶(hù)端限流配置

    Java RPC框架如何實(shí)現(xiàn)客戶(hù)端限流配置

    這篇文章主要介紹了Java RPC框架如何實(shí)現(xiàn)客戶(hù)端限流配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 使用Java代碼來(lái)比較Android客戶(hù)端版本號(hào)

    使用Java代碼來(lái)比較Android客戶(hù)端版本號(hào)

    這篇文章主要介紹了使用Java代碼來(lái)比較Android客戶(hù)端版本號(hào),Java是目前安卓程序唯一的開(kāi)發(fā)語(yǔ)言,需要的朋友可以參考下
    2015-07-07
  • Java深入探究關(guān)鍵字abstract的使用

    Java深入探究關(guān)鍵字abstract的使用

    如果一個(gè)方法使用 abstract 來(lái)修飾,則說(shuō)明該方法是抽象方法,抽象方法只有聲明沒(méi)有實(shí)現(xiàn)。需要注意的是 abstract 關(guān)鍵字只能用于普通方法,不能用于 static 方法或者構(gòu)造方法中
    2022-05-05
  • SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程

    SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程

    這篇文章主要介紹了SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接

    Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接

    這篇文章主要為大家詳細(xì)介紹了Java使用IO流實(shí)現(xiàn)音頻的剪切和拼接,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn)

    淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn)

    本文主要介紹了淺談Sharding-JDBC強(qiáng)制路由案例實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java之進(jìn)程和線程的區(qū)別

    Java之進(jìn)程和線程的區(qū)別

    這篇文章主要介紹了進(jìn)程與線程的區(qū)別,線程具有許多傳統(tǒng)進(jìn)程所具有的特征,而把傳統(tǒng)的進(jìn)程稱(chēng)為重型進(jìn)程(Heavy—Weight Process),它相當(dāng)于只有一個(gè)線程的任務(wù),有感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • Spring?Boot整合Log4j2.xml的問(wèn)題及解決方法

    Spring?Boot整合Log4j2.xml的問(wèn)題及解決方法

    這篇文章主要介紹了Spring?Boot整合Log4j2.xml的問(wèn)題,本文給大家分享解決方案,需要的朋友可以參考下
    2023-09-09
  • 詳解IDEA搭建springBoot方式一(推薦)

    詳解IDEA搭建springBoot方式一(推薦)

    這篇文章主要介紹了IDEA搭建springBoot方式一(推薦),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

壤塘县| 商水县| 康平县| 富宁县| 治县。| 济南市| 延吉市| 丰镇市| 蒙山县| 腾冲县| 安新县| 芦溪县| 兴业县| 红原县| 商丘市| 师宗县| 汶上县| 南溪县| 祁阳县| 南陵县| 兴化市| 姜堰市| 道真| 徐州市| 孝感市| 长武县| 马关县| 遂平县| 静安区| 亳州市| 磴口县| 京山县| 天峻县| 福建省| 南川市| 迁西县| 澄江县| 临漳县| 福鼎市| 旺苍县| 贵阳市|