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

SpringBoot和Vue接口如何調(diào)用傳參

 更新時(shí)間:2025年02月22日 16:32:28   作者:小劉愛搬磚  
本文總結(jié)了SpringBoot和Vue.js中接口調(diào)用的常見傳參方式,包括GET、POST請(qǐng)求的參數(shù)傳遞方式,以及SpringBoot中常用的注解進(jìn)行參數(shù)接收的方法,文章詳細(xì)介紹了Axios請(qǐng)求的封裝方法,并提供了一些實(shí)際的代碼示例

SpringBoot和Vue接口調(diào)用傳參

簡單總結(jié)一下常用的傳參方式,一些前后端分離項(xiàng)目接口調(diào)試時(shí)經(jīng)常出現(xiàn)傳參格式錯(cuò)誤問題。

前后端進(jìn)行交互時(shí)方法一般就分為get和post,至于后面的delete和put都是基于post進(jìn)行封裝而出的。

Http請(qǐng)求中不同的請(qǐng)求方式會(huì)設(shè)置不同的Content-Type,參數(shù)的傳遞方式就會(huì)不一樣,主要分為以下三種:

  • Query String Parameters
  • Form Data
  • Request Payload

下面使用的axios請(qǐng)求都是經(jīng)過封裝的,文章最后有對(duì)應(yīng)的封裝方法

GET請(qǐng)求

我們發(fā)送get請(qǐng)求時(shí),參數(shù)是通過url的形式進(jìn)行傳遞,即url中?后面拼接的參數(shù),以&做連接,參數(shù)直接表現(xiàn)在url中。

例如:

http://localhost:8801/api/selectDetail?id=1&userName="zhang"

前端通過query String parameters 方式傳參,axios中指明使用params

export function selectList(params) {
  return request({
    url: 'api/xxx/selectList',
    method: 'get',
    params
  })
}

POST請(qǐng)求

Post請(qǐng)求有兩種傳遞參數(shù)的形式:form datarequest payload的形式

發(fā)起post請(qǐng)求時(shí)若未指定content-type,則默認(rèn)content-type為application/x-www-form-urlencoded,參數(shù)是在請(qǐng)求體中,參數(shù)以form data的形式傳遞,不會(huì)出現(xiàn)在請(qǐng)求的url中。

若content-type為application/json,則參數(shù)會(huì)以request payload的形式進(jìn)行傳遞,數(shù)據(jù)格式為json形式,請(qǐng)求表單的參數(shù)在request payload中,不會(huì)出現(xiàn)在請(qǐng)求的url中,使用原生的Ajax post請(qǐng)求不指定請(qǐng)求頭默認(rèn)的參數(shù)就是出現(xiàn)在request payload中。

前端通過formData方式傳參,axios中指明使用data

export function selectList(data) {
  return request({
    url: 'api/xxx/selectList',
    method: 'post',
    data
  })
}

前端通過request payload方式傳參

export function selectList(data) {
  return request({
    url: 'api/xxx/selectList',
    method: 'post',
    data
  })
}

SpringBoot注解對(duì)應(yīng)傳參方式

@RequestParam() 默認(rèn)接收application/x-www-form-urlencoded編碼格式的參數(shù)

@RequestBody() 默認(rèn)接收json格式的參數(shù)

1.spring通過 @requestParam (queryParam)(路徑傳參-默認(rèn)傳參注解)接收的參數(shù)都是url拼接 將參數(shù)放到query String parameters,前端可以通過下面三種方式傳參

  • params 傳參 (推薦) – params
  • formData傳參 – data (需要修改Content-Type)
  • Qs傳參 – data ,需要手動(dòng)處理header “Content-Type”: “application/x-www-form-urlencoded”

spring boot接口

@GetMapping(value = "/hello")
    public ResponseEntity getUser(@RequestParam String username){  
}
//http://lcoalhost:8080/hello?username=1111

axios調(diào)用

#params 傳參
export function find(params){
  return request({
    url: `${API}/info/find`,
    method: 'get',
    params:params
  })
}

2.spring通過@requestBody,通過post提交消息主體中參數(shù),參數(shù)值為json格式,默認(rèn)就是json格式不需要進(jìn)行處理

  • 通過data傳參

springboot 接口

@PostMapping
public ResponseEntity<Record> add(@RequestBody Record record) {
    return ResponseEntity.ok(this.recordService.insert(record));
}

axios調(diào)用方法(這里的axios是經(jīng)過封裝后的)

export function add(data){
  return request({
    url: `${API}/record/add`,
    method: 'post',
    data
  })
}

請(qǐng)求信息:

POST http://localhost:5138/record/
Content-Type: application/json
--- 參數(shù)內(nèi)容
{
  "objective": 1.0,
  "objRate": 1.0,
  "objDate": "2022/1/8 12:05:00",
  "outputPrice": 1.0,
}

3.@pathVariable(@pathParam)url路徑中參數(shù)

  • 拼接url

springboot接口

@DeleteMapping(value = "/job/{id}")
    public ResponseEntity delete(@PathVariable(value = "id", required = false, defaultValue = "0") Long id){
}
//http://localhost:8080/job/1

axios調(diào)用

export function queryById(id){
  return request({
    url: `${API}/info/queryById/${id}`,
    method: 'get'
  })
}

axios對(duì)應(yīng)的封裝方法

// 封裝axios:使用請(qǐng)求與響應(yīng)攔截器
import axios from 'axios'
import { ElMessage, ElMessageBox } from 'element-plus'
// 引入qs
import qs from 'qs'
import useUserStore from '@/store/modules/user'

// 利用axios對(duì)象的create方法,創(chuàng)建axios實(shí)例(其他的配置:基礎(chǔ)路徑、超時(shí)時(shí)間)
const service = axios.create({
  //基礎(chǔ)路徑
  baseURL: '/',
  timeout: 5000, // 超時(shí)時(shí)間的設(shè)置
})
// 第二步:request實(shí)例添加請(qǐng)求與響應(yīng)攔截器
service.interceptors.request.use((config) => {
  // 獲取用戶倉庫內(nèi)的token,登錄成功后攜帶公共參數(shù)
  let userStore = useUserStore()
  if(userStore.token) {
    config.headers['Authorization'] = userStore.token
  }
  return config
})

// 第三步:配置相應(yīng)攔截器
service.interceptors.response.use(
  (response) => {
    // 獲取返回成功數(shù)據(jù)的狀態(tài)碼code和錯(cuò)誤信息message
    const { code, message } = response.data;
    if(code) {
      // 有狀態(tài)碼判斷是否為200,除此皆為異常響應(yīng)
      if(code == 200) {
       return response.data
      }
      else if (code < 200 || code > 300) {
        ElMessage({
          message: message || '系統(tǒng)出錯(cuò)',
          type: 'error'
        });
        return Promise.reject('error')
      }
      else {
        // 其他類型的狀態(tài)碼
        ElMessage.error(message)
        return Promise.reject(response.data)
      }
    } else {
      // 未返回狀態(tài)碼直接返回響應(yīng)信息
      ElMessage.error('系統(tǒng)服務(wù)連接失敗')
      return Promise.reject(response)
    }
  },
  (error) => {
    // 失敗的回調(diào):處理http網(wǎng)絡(luò)錯(cuò)誤
    //定義一個(gè)變量:存儲(chǔ)網(wǎng)絡(luò)錯(cuò)誤信息
    let message = ''
    if(error.code === 'ECONNABORTED') {
      message = '連接超時(shí)中止,請(qǐng)稍后重試!'
    } else {
      // http狀態(tài)碼
      const status = error.response.status
      switch (status) {
        case 401:
          message = '無權(quán)訪問'
          break
        case 404:
          message = '請(qǐng)求地址錯(cuò)誤'
          break
        default:
          message = '網(wǎng)絡(luò)出現(xiàn)問題'
          break
      }
    }
    // 提示錯(cuò)誤信息
    ElMessage({
      type: 'error',
      message,
    })
    return Promise.reject(error)
  },
)


// 利用axios對(duì)象的create方法,創(chuàng)建axios實(shí)例(其他的配置:基礎(chǔ)路徑、超時(shí)時(shí)間)
interface ReqParamsType {
  url:string
  data?: any
  params?:any
  method?:string,
  type?:string
  timestamp?:boolean
  timeout?:number
}
const request = ({
   url,
   data,
   params,
   method= 'post',
   type='json',
   timestamp = false,
   timeout,
 }:ReqParamsType): Promise<T> => {
  let config = {
    method,
    url,
    baseURL: '/',
    withCredentials: true,
    responseType: 'json',
    headers: {
      'Access-Control-Allow-Origin': '*',
      'X-Requested-With': 'XMLHttpRequest'
    },
    timestamp: timestamp,
    timeout: timeout
  };
  if (method === 'get') {
    if (timestamp) {
      config.url += config.url.indexOf('?') > 0 ? '&' : '?';
      config.url += `timestamp=${+new Date()}`;
    }
    Object.assign(config, {
      params
    });
  }
  else {
    if (type === 'form') {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
      Object.assign(config, {
        data: qs.stringify(data)
      });
      config.url = config.url+'?'+qs.stringify(data)
    } else if (type === 'json') {
      config.headers['Content-Type'] = 'application/json';
      Object.assign(config, {
        data: data
      });
    } else if (type === 'formData') {
      let formData = new FormData();
      for (let i in data) {
        if(data[i] != null) {
          formData.append(i, data[i]);
        }
      }
      config.headers['Content-Type'] = 'multipart/form-data';
      Object.assign(config, {
        data: formData
      });
    }else if(type === 'picture'){
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
      Object.assign(config, {
        data: data
      });
    }
    if(timestamp) {
      const code = `${(new Date()).getTime()}_${Math.round(Math.random()*10000)}`
    }
  }
  return new Promise((resolve, reject) => {
    service(config).then((response) => {
      resolve(response);
    }, (error) => {
      reject(error);
    }).catch((error) => {
      reject(error);
    });
  });
}
// 對(duì)外暴露
export default request

總結(jié)

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

相關(guān)文章

  • Java實(shí)現(xiàn)Redis哨兵的示例代碼

    Java實(shí)現(xiàn)Redis哨兵的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)Redis哨兵的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot使用maven指定依賴包的版本(解決示例)

    SpringBoot使用maven指定依賴包的版本(解決示例)

    我們?cè)谑褂肁依賴的時(shí)候,這個(gè)依賴有引入了第三方B依賴,這時(shí)候我想指定B依賴的版本號(hào),下面?zhèn)€大家分享解決示例,對(duì)SpringBoot maven依賴包相關(guān)配置方法感興趣的朋友一起看看吧
    2024-04-04
  • Mybatis防止sql注入原理分析

    Mybatis防止sql注入原理分析

    這篇文章主要介紹了Mybatis防止sql注入原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 8 lambda表達(dá)式list操作分組、過濾、求和、最值、排序、去重代碼詳解

    java 8 lambda表達(dá)式list操作分組、過濾、求和、最值、排序、去重代碼詳解

    java8的lambda表達(dá)式提供了一些方便list操作的方法,主要涵蓋分組、過濾、求和、最值、排序、去重,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 微服務(wù)Springcloud之Feign的基本使用

    微服務(wù)Springcloud之Feign的基本使用

    這篇文章主要介紹了微服務(wù)Springcloud之Feign的基本使用,Spring?Cloud集成Feign并對(duì)其進(jìn)行了增強(qiáng),使Feign支持了Spring?MVC注解,需要的朋友可以參考下
    2023-03-03
  • Java 注解的使用實(shí)例詳解

    Java 注解的使用實(shí)例詳解

    這篇文章主要介紹了Java 注解的使用實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Mybatis中特殊SQL的執(zhí)行

    Mybatis中特殊SQL的執(zhí)行

    這篇文章主要介紹了Mybatis中特殊SQL的執(zhí)行,介紹內(nèi)容包括模糊查詢、批量刪除、動(dòng)態(tài)設(shè)置表名、添加功能獲取自增的主鍵等相關(guān)資料,需要的小伙伴可以參考一下
    2022-04-04
  • java在原字符中插入新字符或字符串實(shí)例

    java在原字符中插入新字符或字符串實(shí)例

    這篇文章主要介紹了java在原字符中插入新字符或字符串實(shí)例,具有很好的價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java圖論弗洛伊德和迪杰斯特拉算法解決最短路徑問題

    java圖論弗洛伊德和迪杰斯特拉算法解決最短路徑問題

    這篇文章主要為大家介紹了java圖論弗洛伊德算法和迪杰斯特拉算法解決最短路徑的問題示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • JAVA垃圾收集器與內(nèi)存分配策略詳解

    JAVA垃圾收集器與內(nèi)存分配策略詳解

    這篇文章介紹了JAVA垃圾收集器與內(nèi)存分配策略,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-07-07

最新評(píng)論

察雅县| 页游| 普陀区| 南丰县| 砚山县| 兰州市| 长汀县| 朝阳市| 延边| 南召县| 曲水县| 西充县| 怀远县| 贺兰县| 南京市| 绿春县| 上杭县| 宝兴县| 山东省| 斗六市| 乌拉特后旗| 金山区| 茂名市| 大厂| 阳西县| 乌兰浩特市| 赞皇县| 上虞市| 邮箱| 陈巴尔虎旗| 绥滨县| 沅江市| 宜川县| 巴彦淖尔市| 进贤县| 太和县| 莱阳市| 镇赉县| 沿河| 青冈县| 公主岭市|