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

溫馨提示×

溫馨提示×

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

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

controller函數中參數列表怎么使用多個@RequestBody

發布時間:2023-04-10 17:45:25 來源:億速云 閱讀:191 作者:iii 欄目:開發技術

這篇文章主要介紹“controller函數中參數列表怎么使用多個@RequestBody”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“controller函數中參數列表怎么使用多個@RequestBody”文章能幫助大家解決問題。

    controller參數列表使用多個@RequestBody

    首先出現這種情況是因為有下面這種需求

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

    也就是在ajax傳輸數據時有多種數據類型在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";
        }

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

    原因

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

    如果想解決這種問題

    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函數改為

    @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注解的主要作用就是用于接收前端的參數,當我們使用post請求的時候,我們會將參數放在request body中,此時我們就需要在Controller的方法的參數前面加上@RequestBody用來接受到前端傳過來的request body中的值。

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

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

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

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

    數據類型是JSON:{“aaa”:“111”,“bbb”:“222”}

    以上內容來源于不同的資料內容。

    總是就是

    當入參只有一個參數的時候,此時** @RequestBody **的注解是否存在沒有必要性,比如:String abcd;

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

    abcd = "1234";
    
    
    {
    abcd = "1234"
    }

    二者的區別不是很大。

    只有當入參較多,或者是一個實體類入參時,加上該注解,前端以json的形式傳參,后臺才能接收到。

    注意,如果多個值入參,比如:String aaa, String bbb,String ccc,

    當以這種形式入參時需要加上**@RequestParam**注解,用于匹配各參數是否能一一對應上。

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

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

    • value:參數名 

    • required:是否包含該參數,默認為true,表示該請求路徑中必須包含該參數,如果不包含就報錯。 

    • defaultValue:默認參數值,如果設置了該值,required=true將失效,自動為false,如果沒有傳該參數,就使用默認值

    關于“controller函數中參數列表怎么使用多個@RequestBody”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

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

    AI

    弥勒县| 鄂尔多斯市| 满洲里市| 容城县| 巴中市| 阿瓦提县| 深泽县| 会宁县| 广南县| 阿克陶县| 洛浦县| 花垣县| 池州市| 通州区| 平利县| 绍兴市| 平凉市| 林口县| 神木县| 罗城| 定陶县| 江孜县| 慈溪市| 成都市| 扎赉特旗| 巩义市| 眉山市| 米易县| 旬阳县| 广西| 三原县| 阿瓦提县| 昌江| 类乌齐县| 武胜县| 田东县| 开封市| 上杭县| 通辽市| 太白县| 三门县|