欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

首先出現(xiàn)這種情況是因?yàn)橛邢旅孢@種需求

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

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

從而就會(huì)有下面這種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";
?? ?}

這樣就會(huì)出現(xiàn)400錯(cuò)誤,服務(wù)器無(wú)法理解這個(gè)請(qǐng)求

原因

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

如果想解決這種問(wèn)題

1.新建一個(gè)包裝上面兩種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";
?? ?}

但是這樣又顯得比較不夠簡(jiǎn)潔

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

@RequestBody是否存在的影響

首先 明確一點(diǎn)是 RequestBody注解的主要作用就是用于接收前端的參數(shù),當(dāng)我們使用post請(qǐng)求的時(shí)候,我們會(huì)將參數(shù)放在request body中,此時(shí)我們就需要在Controller的方法的參數(shù)前面加上@RequestBody用來(lái)接受到前端傳過(guò)來(lái)的request body中的值。

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

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

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

使用@RequestBody注解時(shí),用于接收Content-Type為application/json類型的請(qǐng)求,

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

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

總是就是

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

那么前端傳參的時(shí)候:傳入

abcd = "1234";


{
abcd = "1234"
}

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

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

注意,如果多個(gè)值入?yún)?,比如:String aaa, String bbb,String ccc,

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

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

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

  • value:參數(shù)名 
  • required:是否包含該參數(shù),默認(rèn)為true,表示該請(qǐng)求路徑中必須包含該參數(shù),如果不包含就報(bào)錯(cuò)。 
  • defaultValue:默認(rèn)參數(shù)值,如果設(shè)置了該值,required=true將失效,自動(dòng)為false,如果沒(méi)有傳該參數(shù),就使用默認(rèn)值

總結(jié)

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

相關(guān)文章

  • SrpingDruid數(shù)據(jù)源加密數(shù)據(jù)庫(kù)密碼的示例代碼

    SrpingDruid數(shù)據(jù)源加密數(shù)據(jù)庫(kù)密碼的示例代碼

    本篇文章主要介紹了SrpingDruid數(shù)據(jù)源加密數(shù)據(jù)庫(kù)密碼的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Mybatis全局配置及映射關(guān)系的實(shí)現(xiàn)

    Mybatis全局配置及映射關(guān)系的實(shí)現(xiàn)

    本文主要介紹了Mybatis全局配置及映射關(guān)系的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用SpringBoot_jar方式啟動(dòng)并配置日志文件

    使用SpringBoot_jar方式啟動(dòng)并配置日志文件

    這篇文章主要介紹了使用SpringBoot_jar方式啟動(dòng)并配置日志文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 散列存儲(chǔ)詳解及簡(jiǎn)單示例

    Java 散列存儲(chǔ)詳解及簡(jiǎn)單示例

    這篇文章主要介紹了Java 散列存儲(chǔ)詳解及簡(jiǎn)單示例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 基于@MapperScan和@ComponentScan的使用區(qū)別

    基于@MapperScan和@ComponentScan的使用區(qū)別

    這篇文章主要介紹了@MapperScan和@ComponentScan的使用區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring IOC與DI核心重點(diǎn)分析

    Spring IOC與DI核心重點(diǎn)分析

    IOC也是Spring的核心之一了,之前學(xué)的時(shí)候是采用xml配置文件的方式去實(shí)現(xiàn)的,后來(lái)其中也多少穿插了幾個(gè)注解,但是沒(méi)有說(shuō)完全采用注解實(shí)現(xiàn)。那么這篇文章就和大家分享一下,全部采用注解來(lái)實(shí)現(xiàn)IOC + DI
    2022-10-10
  • spring?boot實(shí)現(xiàn)圖片上傳到后臺(tái)的功能(瀏覽器可直接訪問(wèn))

    spring?boot實(shí)現(xiàn)圖片上傳到后臺(tái)的功能(瀏覽器可直接訪問(wèn))

    這篇文章主要介紹了spring?boot實(shí)現(xiàn)圖片上傳到后臺(tái)的功能(瀏覽器可直接訪問(wèn)),需要的朋友可以參考下
    2022-04-04
  • Spring Boot接口冪等插件用法示例解析

    Spring Boot接口冪等插件用法示例解析

    這篇文章主要介紹了Spring Boot接口冪等插件用法示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java利用布隆過(guò)濾器實(shí)現(xiàn)快速檢查元素是否存在

    Java利用布隆過(guò)濾器實(shí)現(xiàn)快速檢查元素是否存在

    布隆過(guò)濾器是一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過(guò)濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。本文就來(lái)詳細(xì)說(shuō)說(shuō)實(shí)現(xiàn)的方法,需要的可以參考一下
    2022-10-10
  • Java?Ribbon與openfeign區(qū)別和用法講解

    Java?Ribbon與openfeign區(qū)別和用法講解

    Ribbon是基于Netflix?Ribbon實(shí)現(xiàn)的一套客戶端負(fù)載均衡的工具,主要功能是提供客戶端的軟件負(fù)載均衡算法和服務(wù)調(diào)用。openfeign對(duì)Feign進(jìn)行了增強(qiáng),使其支持Spring MVC注解,另外還整合了Ribbon和Nacos,從而使得Feign的使用更加方便
    2022-08-08

最新評(píng)論