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

controller函數(shù)中參數(shù)列表使用多個@RequestBody問題

 更新時間:2023年04月10日 16:43:12   作者:大數(shù)據(jù)羊說  
這篇文章主要介紹了controller函數(shù)中參數(shù)列表使用多個@RequestBody問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

controller參數(shù)列表使用多個@RequestBody

首先出現(xiàn)這種情況是因為有下面這種需求

$.ajax({ ?
?? ??? ? ? ?type: "POST", ?
?? ??? ? ? ?url: "${pageContext.request.contextPath}/courses", ?
?? ??? ? ? ?data: JSON.stringify({
?? ??? ? ? ??? ?course:course,
?? ??? ? ?courseInfoList:courseInfoList
?? ? ? ? ? }),//將對象序列化成JSON字符串 ?
?? ??? ? ? ?
?? ??? ? ? ?dataType:"json", ?
?? ??? ? ? ?contentType : 'application/json;charset=utf-8', //設(shè)置請求頭信息 ?
?? ??? ? ? ?success: function(data){ ?
?? ??? ? ? ?}, ?
?? ??? ? ? ?error: function(res){ ?
?? ??? ? ? ?} ?
?? ??? ?});?

也就是在ajax傳輸數(shù)據(jù)時有多種數(shù)據(jù)類型在data域中

從而就會有下面這種controller

@RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
?? ?public String createCourse(@RequestBody Course course, @RequestBody List<CourseInfo> courseInfoList)
?? ?{
?? ??? ?System.out.println(coursePackage.getCourse());
?? ??? ?System.out.println(coursePackage.getCourseInfoList());
?? ??? ?
?? ??? ?return "/createCourse";
?? ?}

這樣就會出現(xiàn)400錯誤,服務器無法理解這個請求

原因

@requestbody的含義是在當前對象獲取整個http請求的body里面的所有數(shù)據(jù),因此spring就不可能將這個數(shù)據(jù)強制包裝成Course或者List類型,并且從@requestbody設(shè)計上來說,只獲取一次就可以拿到請求body里面的所有數(shù)據(jù),就沒必要出現(xiàn)有多個@requestbody出現(xiàn)在controller的函數(shù)的形參列表當中

如果想解決這種問題

1.新建一個包裝上面兩種entity的entity類:

package com.yyc.entity;
?
import java.util.List;
?
public class CoursePackage {
?
?? ?public CoursePackage() {
?? ??? ?// TODO Auto-generated constructor stub
?? ?}
?? ?
?? ?private Course course;
?? ?
?? ?private List<CourseInfo> courseInfoList;
?? ?
?? ?public void setCourse(Course course)
?? ?{
?? ??? ?this.course = course;
?? ?}
?? ?
?? ?public void setCourseInfoList(List<CourseInfo> courseInfoList)
?? ?{
?? ??? ?this.courseInfoList = courseInfoList;
?? ?}
?? ?
?? ?public Course getCourse()
?? ?{
?? ??? ?return course;
?? ?}
?? ?
?? ?public List<CourseInfo> getCourseInfoList()
?? ?{
?? ??? ?return courseInfoList;
?? ?}
?
}

然后將controller函數(shù)改為

@RequestMapping(method = RequestMethod.POST ,consumes = "application/json")
?? ?public String createCourse(@RequestBody CoursePackage coursePackage,Model model)
?? ?{
?? ??? ?System.out.println(coursePackage.getCourse());
?? ??? ?System.out.println(coursePackage.getCourseInfoList());
?? ??? ?return "/createCourse";
?? ?}

但是這樣又顯得比較不夠簡潔

2..用Map<String, Object>接受request body,自己反序列化到各個entity中。

@RequestBody是否存在的影響

首先 明確一點是 RequestBody注解的主要作用就是用于接收前端的參數(shù),當我們使用post請求的時候,我們會將參數(shù)放在request body中,此時我們就需要在Controller的方法的參數(shù)前面加上@RequestBody用來接受到前端傳過來的request body中的值。

@PostMapping("/save")
? ? public Response<?> save(@RequestBody Insurance insurance){
? ? ? ? return null;
? ? }

不使用@RequestBody注解時,可以接收Content-Type為application/x-www-form-urlencoded類型的請求所提交的數(shù)據(jù),數(shù)據(jù)格式:aaa=111 b b b = 222 。

form 表單提交以及 jQuery的 bbb=222。form表單提交以及jQuery的bbb=222。form表單提交以及jQuery的.post()方法所發(fā)送的請求就是這種類型。

使用@RequestBody注解時,用于接收Content-Type為application/json類型的請求,

數(shù)據(jù)類型是JSON:{“aaa”:“111”,“bbb”:“222”}

以上內(nèi)容來源于不同的資料內(nèi)容。

總是就是

當入?yún)⒅挥幸粋€參數(shù)的時候,此時** @RequestBody **的注解是否存在沒有必要性,比如:String abcd;

那么前端傳參的時候:傳入

abcd = "1234";


{
abcd = "1234"
}

二者的區(qū)別不是很大。

只有當入?yún)⑤^多,或者是一個實體類入?yún)r,加上該注解,前端以json的形式傳參,后臺才能接收到。

注意,如果多個值入?yún)ⅲ热纾篠tring aaa, String bbb,String ccc,

當以這種形式入?yún)r需要加上**@RequestParam**注解,用于匹配各參數(shù)是否能一一對應上。

@RequestParam:將請求參數(shù)綁定到你控制器的方法參數(shù)上(是springmvc中接收普通參數(shù)的注解)

語法:@RequestParam(value=”參數(shù)名”,required=”true/false”,defaultValue=””) 

  • value:參數(shù)名 
  • required:是否包含該參數(shù),默認為true,表示該請求路徑中必須包含該參數(shù),如果不包含就報錯。 
  • defaultValue:默認參數(shù)值,如果設(shè)置了該值,required=true將失效,自動為false,如果沒有傳該參數(shù),就使用默認值

總結(jié)

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

相關(guān)文章

  • Zookeeper ZkClient使用介紹

    Zookeeper ZkClient使用介紹

    ZkClient是Github上?個開源的zookeeper客戶端,在Zookeeper原生API接口之上進行了包裝,是?個更易用的Zookeeper客戶端,同時,zkClient在內(nèi)部還實現(xiàn)了諸如Session超時重連、Watcher反復注冊等功能
    2022-09-09
  • Java利用JavaCPP調(diào)用算法示例

    Java利用JavaCPP調(diào)用算法示例

    本文主要介紹了Java利用JavaCPP調(diào)用算法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java超詳細講解三大特性之一的多態(tài)

    Java超詳細講解三大特性之一的多態(tài)

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定
    2022-05-05
  • Java jdk安裝及javac命令無效解決方案

    Java jdk安裝及javac命令無效解決方案

    這篇文章主要介紹了Java jdk安裝及javac命令無效解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • java協(xié)變返回類型使用示例

    java協(xié)變返回類型使用示例

    在面向?qū)ο蟪绦蛟O(shè)計中,協(xié)變返回類型指的是子類中的成員函數(shù)的返回值類型不必嚴格等同于父類中被重寫的成員函數(shù)的返回值類型,而可以是更"狹窄"的類型
    2014-02-02
  • Intellij idea熱部署插件JRebel的使用

    Intellij idea熱部署插件JRebel的使用

    這篇文章主要介紹了Intellij idea熱部署插件JRebel的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java中request對象常用方法匯總

    Java中request對象常用方法匯總

    這篇文章主要為大家詳細匯總了Java中request對象的常用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • SpringBoot+MyBatis實現(xiàn)登錄案例

    SpringBoot+MyBatis實現(xiàn)登錄案例

    前端時間在網(wǎng)上看到有朋友在學習springboot項目的搭建過程,今天就抽空給大家分享一個案例幫助大家學習SpringBoot+MyBatis實現(xiàn)登錄功能,具體實現(xiàn)代碼跟隨小編一起看看吧
    2021-06-06
  • 關(guān)于Java的對象序列化流和反序列化流詳細解讀

    關(guān)于Java的對象序列化流和反序列化流詳細解讀

    這篇文章主要介紹了關(guān)于Java的對象序列化流和反序列化流,對象序列化:就是將對象保存到磁盤中,或者在網(wǎng)絡(luò)中傳輸對象,反之,自己序列還可以從文件中讀取回來,重構(gòu)對象,對它進行反序列化,需要的朋友可以參考下
    2023-05-05
  • 一文詳解Java Netty中的Constant類

    一文詳解Java Netty中的Constant類

    這篇文章主要介紹了Constants類即常量類是將一些常用的變量集合到一個地方的類,文中有詳細的代碼示例,感興趣的同學可以參考一下
    2023-05-05

最新評論

锡林郭勒盟| 张家港市| 大宁县| 苗栗市| 客服| 都昌县| 屏东市| 晴隆县| 南开区| 新沂市| 获嘉县| 惠东县| 山阳县| 鄂伦春自治旗| 巴林左旗| 阜新市| 徐水县| 甘德县| 隆德县| 宾阳县| 乡城县| 胶南市| 于都县| 辽宁省| 美姑县| 建平县| 武功县| 临颍县| 兰西县| 通山县| 大港区| 樟树市| 吉木乃县| 池州市| 文化| 郎溪县| 大荔县| 太仓市| 蕉岭县| 台北市| 阿克陶县|