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

axios利用params/data發(fā)送參數(shù)給springboot?controlle的正確獲取方式

 更新時間:2022年02月11日 10:01:42   作者:DW039  
這篇文章主要給大家介紹了關(guān)于axios利用params/data發(fā)送參數(shù)給springboot?controlle的正確獲取方式,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

引言

今天有人遇到接口調(diào)用不通的情況,粗略看了一下是axios跨域請求引起了。找到問題,處理就簡單多了。

但是我看其代碼,發(fā)現(xiàn)比較有意思

export function agentlist(query) {
  return request({
    url: /agent/list',
    method: 'get',
    params: query
  })
}
export function editagent(data) {
    return request({
        url: '/agent/editagent',
        method: 'post',
        data:data
    })
}
export function deleteagent(id) {
    return request({
        url: '/agent/delete',
        method: 'post',
        params:{id}
    })
}

上面的代碼中的request是axios實例,同是post卻出現(xiàn)了data或params做數(shù)載體的情況。憑直覺該代碼會在后續(xù)請求中出現(xiàn)問題,果不其然后續(xù)出現(xiàn)各種問題。

出現(xiàn)的問題主要是:前端傳遞參數(shù)給了springboot程序,但是程序中卻接收不到數(shù)據(jù)或只接收到部分?jǐn)?shù)據(jù)。出現(xiàn)問題前后端代碼如下:

前端:

export function login(account, password, orgType) {
  return request({
    url: '/webapi/login',
    method: 'post',
    data: {"loginId":account,"password":password,"orgType":orgType}
)}

后端:

@PostMapping(value = "/login")
public Result login(String loginId, String password, int orgType, HttpServletResponse response){
}

程序運行異常:

java.lang.IllegalStateException: Optional int parameter 'orgType' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

問題分析:

出現(xiàn)異常的原因看似orgType無法轉(zhuǎn)換為對象類型引發(fā)的,真實情況并非如此。真正的原因是Java中的代碼根本就無法獲取到3個參數(shù),前兩個是String類型在無法獲取參數(shù)的情況下會被賦值為null,第三個參數(shù)因是 int 類型,因無法賦值為null,故引發(fā)該異常。出現(xiàn)異常并非Java代碼寫得不好,而是前后臺傳參銜接出了問題。

前端數(shù)據(jù)發(fā)送網(wǎng)絡(luò)請求,注意下面的數(shù)據(jù)的格式:

前端數(shù)據(jù)確實發(fā)送了,但是數(shù)據(jù)的格式為json格式。

服務(wù)器端POST請求獲取參數(shù),要求的參數(shù)格式為:key=value&key2=value2&key.....,因此服務(wù)器端無法獲取數(shù)據(jù)也就好理解了。

解決上述解決方案:

前端解決方案1

export function login(account, password, orgType) {return request({
    url: '/webapi/login',
    method: 'post',
    data: "loginId="+account+ "&password="+password+"&orgType="+orgType
  })
}

手動構(gòu)造服務(wù)器端需要的數(shù)據(jù)格式,此時再次執(zhí)行客戶端程序,并跟蹤網(wǎng)絡(luò)請求如下圖,springboot程序正常獲取到數(shù)據(jù)。

上面這種方案雖能解決問題,但太機(jī)械,用來分析問題可以,生產(chǎn)中就行不通了。

前端方案2

export function login(account, password, orgType) {
  return request({
    url: '/webapi/login',
    method: 'post',
    params: {"loginId":account, "password":password,"orgType":orgType} 
  })
}

將 axios 中的參數(shù)載體由 data 改為 params,此時再次執(zhí)行客戶端程序,并跟蹤網(wǎng)絡(luò)請求如下圖,springboot程序正常獲取到數(shù)據(jù)。

上面這種解決方案,將要發(fā)送的數(shù)據(jù)對象以params做載體發(fā)送時,axios會把數(shù)據(jù)對象的屬性與值拼成 k=v&k=v 格式,但這些數(shù)據(jù)是作為 Query String(放在url中的參數(shù)) 傳遞給后臺程序的,因此并非真正意義上post傳參(實際是post方式向增加了參數(shù)url地址,提交空數(shù)據(jù)??)。

總結(jié):通過上面的兩個前端解決方案,現(xiàn)在就很容易搞清楚 axios 中的 params與data 傳參的區(qū)別了。

params 傳參,參數(shù)以 k=v&k=v 格式放置在 url 中傳遞。

data傳參,參數(shù)會收到Request Header中的 Content-Type 類型的影響,但它們肯定不會出現(xiàn)在url中,我們就暫且任務(wù) data 的參數(shù)會在 form表單中吧。

前端解決方案3

使用 qs 來實現(xiàn) json 對象的 k=v 格式化

import qs form 'qs'

export function login(account, password, orgType) {
  return request({
    url: '/webapi/login',
    method: 'post',
    data: qs.stringify({"loginId":account, "password":password,"orgType":orgType})
  })
}

如此一來,就非常方便的將json對象序列化為url格式,json對象屬性再多也不再是負(fù)擔(dān)。

現(xiàn)在 json 當(dāng)紅,js模塊化.....超速發(fā)展,我們的項目中再傳一個兩個的參數(shù)太low,現(xiàn)在流行傳對象。要前端傳遞對象到后端 springboot web 程序,現(xiàn)在這都是事兒。

前端傳遞json對象到springboot web 程序

1、在前端使用 data 作為載體傳遞 json 對象

var jsonObject = {"loginId":account, "password":password,"orgType":orgType};


export function login(obj) {
  return request({
    url: '/webapi/login',
    method: 'post',
    data: obj
  })
}

login(jsonObject);

2、Springboot后端

class LoginModel{ 
    String loginId,passowrd;

    public String getLoginId() {
        return loginId;
    }

    public void setLoginId(String loginId) {
        this.loginId = loginId;
    }

    public String getPassowrd() {
        return passowrd;
    }

    public void setPassowrd(String passowrd) {
        this.passowrd = passowrd;
    }

    public Integer getOrgType() {
        return orgType;
    }

    public void setOrgType(Integer orgType) {
        this.orgType = orgType;
    }

    Integer orgType;
    
}

    @PostMapping(value = "/login")
    public Result login(@RequestBody LoginModel model, HttpServletResponse response){}

springboot web端,通過@RequestBody注解將自動收集請求的 payload 中的數(shù)據(jù),并將數(shù)據(jù)反序列化為 LoginModel對象。

簡單總結(jié)一下 springboot中關(guān)于 @RequsetParam、@RequestBody與不加注解獲取參數(shù)的區(qū)別

1、@RequsetParam 獲取 k=v 格式的參數(shù),get/post都可以

2、@RequestBody 獲取payload中的數(shù)據(jù),對于前端傳遞的 json 對象在 springboot web中反序列化尤為方便,同時它還支持獲取二進(jìn)制字節(jié)數(shù)據(jù)等。

3、在不適用注解獲取參數(shù)時,默認(rèn)@RequsetParam機(jī)制,并且要求前端傳遞的參數(shù)名稱與springboot web 在的參數(shù)名稱一致,否則無法獲取到數(shù)據(jù)。

最后在說明一點,用于反序列化的 Java 類,最好不要使用 java基本數(shù)據(jù)類型,盡量使用 基本類型的包裝類型,如上面LoginModel中的 Integer,這樣就可以在前端不傳對應(yīng)參數(shù)時保持為null??

總結(jié)

到此這篇關(guān)于axios利用params/data發(fā)送參數(shù)給springboot controlle的正確獲取方式的文章就介紹到這了,更多相關(guān)axios用params/data發(fā)送參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • egg.js的基本使用和調(diào)用數(shù)據(jù)庫的方法示例

    egg.js的基本使用和調(diào)用數(shù)據(jù)庫的方法示例

    這篇文章主要介紹了egg.js的基本使用和調(diào)用數(shù)據(jù)庫的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 理解JavaScript設(shè)計模式中的單例模式

    理解JavaScript設(shè)計模式中的單例模式

    這篇文章主要介紹了理解JavaScript設(shè)計模式中的單例模式,單例模式即Singleton?Pattern是最簡單的設(shè)計模式之一,下文更多相關(guān)介紹感興趣的小伙伴可以參考一下
    2022-04-04
  • JS實現(xiàn)點擊圖片放大縮小及拖拽功能

    JS實現(xiàn)點擊圖片放大縮小及拖拽功能

    本文使用 vue創(chuàng)建一個可拖拽和縮放的圖片查看器組件,該組件不僅可以展示圖片,還支持用戶通過鼠標(biāo)拖動和縮放來查看細(xì)節(jié),本文將介紹如何封裝一個簡單的圖片拖拽與縮放組件,感興趣的小伙伴跟著小編一起來看看吧
    2025-02-02
  • js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?

    js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?

    接口返回的EventStream結(jié)構(gòu)的數(shù)據(jù),由于http流式傳輸時,可能會分段,所以導(dǎo)致本該每次返回一段json數(shù)據(jù)結(jié)構(gòu)的字符串,變成了多個json數(shù)據(jù)結(jié)構(gòu)的字符串拼接在了一起,本文講述js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組
    2024-08-08
  • Web Uploader文件上傳插件使用詳解

    Web Uploader文件上傳插件使用詳解

    WebUploader是由Baidu WebFE(FEX)團(tuán)隊開發(fā)的一個簡單的以HTML5為主,F(xiàn)LASH為輔的現(xiàn)代文件上傳組件。這篇文章主要為大家詳細(xì)介紹了Web Uploader文件上傳插件使用方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 使用JavaScript實現(xiàn)LRU緩存的代碼詳解

    使用JavaScript實現(xiàn)LRU緩存的代碼詳解

    LRU(Least?Recently?Used)算法是一種廣泛應(yīng)用于內(nèi)存管理和緩存系統(tǒng)的策略,本文將介紹LRU算法的基本原理,并通過JavaScript實現(xiàn)案例,幫助讀者理解其在前端開發(fā)中的應(yīng)用場景,需要的朋友可以參考下
    2024-05-05
  • JavaScript中Math對象相關(guān)知識全解

    JavaScript中Math對象相關(guān)知識全解

    Math對象中的方法很常用,來跟我一起看看吧,下面這篇文章主要給大家介紹了關(guān)于JavaScript中Math對象相關(guān)知識全解的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • JavaScript實現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案

    JavaScript實現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案

    這篇文章主要介紹了JavaScript實現(xiàn)內(nèi)容滾動與導(dǎo)航標(biāo)簽互動關(guān)聯(lián)方案,主要根據(jù)滾動左側(cè)內(nèi)容,關(guān)聯(lián)激活右側(cè)導(dǎo)航節(jié)點展開相應(yīng)介紹,需要的小伙伴可以參考一下
    2022-06-06
  • JavaScript立即執(zhí)行函數(shù)IIFE的用法詳解

    JavaScript立即執(zhí)行函數(shù)IIFE的用法詳解

    在JavaScript開發(fā)中,立即執(zhí)行函數(shù)(Immediately Invoked Function Expression,簡稱IIFE)是一種非常實用的設(shè)計模式,本文將深入探討IIFE的基本概念、作用以及實際應(yīng)用場景,并通過多個示例幫助開發(fā)者更好地掌握這一技術(shù),需要的朋友可以參考下
    2025-02-02
  • js推箱子小游戲步驟代碼解析

    js推箱子小游戲步驟代碼解析

    本篇文章通過代碼分析給大家講解了JS制作推箱子小游戲的步驟以及要點,需要的朋友參考學(xué)習(xí)下吧。
    2018-01-01

最新評論

营口市| 深水埗区| 饶平县| 元朗区| 巴中市| 漳平市| 秀山| 石景山区| 嘉定区| 云浮市| 南华县| 抚宁县| 峨山| 台东市| 嘉义县| 沙河市| SHOW| 尼勒克县| 平度市| 双牌县| 建阳市| 深泽县| 大关县| 九江市| 乐东| 沙洋县| 无极县| 大悟县| 万荣县| 广饶县| 剑川县| 清河县| 吉水县| 阿图什市| 湖口县| 广汉市| 成安县| 巴彦淖尔市| 兴业县| 兴安县| 苗栗市|