中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java使用@RequestBody傳對象參數時會碰到什么問題

發布時間:2021-08-20 18:15:18 來源:億速云 閱讀:202 作者:chen 欄目:開發技術

這篇文章主要介紹“java使用@RequestBody傳對象參數時會碰到什么問題”,在日常操作中,相信很多人在java使用@RequestBody傳對象參數時會碰到什么問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java使用@RequestBody傳對象參數時會碰到什么問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • @RequestBody傳對象參數時碰到的坑

    • 我的真實代碼是這樣的:

    • 也就是下面的區別:

  • @RequestBody 的正確使用

    • @RequestBody接收的是一個Json對象

    • @RequestBody的使用

@RequestBody傳對象參數時碰到的坑

工作中需要使用到http接口傳一個對象數組,網上找到某博客:springmvc參數為對象,數組

但是測試還是不對,報錯:

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"}]}')

看樣子好像時說少了string參數的構造函數,試過很多其他辦法還不行后,決定試一下增加一個String類型的構造方法,代碼如下:

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的官方文檔提到,這個是默認已經加載的了,所以最后spring的配置這部分我又刪了,測試OK。

上面是測試代碼,測試代碼測通后,我的代碼還是報錯

我的真實代碼是這樣的:

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

//錯誤代碼
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

大概意思是不能從這個String轉到List,也就是list對應jsonArray格式不對,使用對象像上面一樣封裝起來Report就OK了。

也就是下面的區別:

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

由于時間原因,只是記錄一下現象和解決方案,具體原因還沒有細看springMVC里的json處理是怎么進行的。

@RequestBody 的正確使用

@RequestBody接收的是一個Json對象

一直在調試代碼都沒有成功,后來發現,其實 @RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。然而在ajax請求往往傳的都是Json對象,后來發現用 JSON.stringify(data)的方式就能將對象變成字符串。

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

@RequestBody的使用

需要加載MappingJackson2HttpMessageConverter,但是SpringBoot的官方文檔提到,這個是默認已經加載的了,而且json字符串和javabean也沒有書寫的錯誤

直接通過瀏覽器輸入url時,@RequestBody獲取不到json對象,需要用java編程或者基于ajax的方法請求,將Content-Type設置為application/json

到此,關于“java使用@RequestBody傳對象參數時會碰到什么問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白城市| 桐柏县| 敖汉旗| 赤壁市| 任丘市| 辽宁省| 河东区| 怀化市| 汝南县| 通化市| 广灵县| 广元市| 丰镇市| 孝昌县| 丹凤县| 海城市| 衡阳县| 绥江县| 阜新| 台南市| 高阳县| 安义县| 汉寿县| 报价| 焉耆| 红安县| 崇左市| 莎车县| 西藏| 富源县| 常宁市| 巴彦县| 健康| 梅州市| 临泉县| 怀柔区| 洪雅县| 鄂尔多斯市| 台南县| 长泰县| 清远市|