91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony:使用網(wǎng)絡(luò)組件axios與Spring Boot進(jìn)行前后端交互

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-22 17:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

流程圖:

image.png

一、簡單的交互

前端請(qǐng)求函數(shù)

firstGet(): Promise< AxiosResponse >{
    return axios.get('http://192.168.211.1:8090/test/1');
}
getAaddB(a: number, b: number): Promise< AxiosResponse >{
   return axios.get('http://192.168.211.1:8090/test/2', {
      params: {
        a: a,
        b: b
      }
   })
}

這兩個(gè)函數(shù)是使用axios庫發(fā)起HTTP GET請(qǐng)求的函數(shù),用于與服務(wù)器進(jìn)行通信

  • 服務(wù)器端點(diǎn): http://192.168.211.1:8090/test/1 這是我本機(jī)的ip地址和springboot運(yùn)行端口,使用在windows終端輸入ipconfig可查看
  • 返回值: 該函數(shù)返回一個(gè)Promise,該P(yáng)romise在請(qǐng)求成功時(shí)將包含AxiosResponse對(duì)象,其中包含了從服務(wù)器接收到的響應(yīng)信息。

后端controller

package com.example.demospring.controller;
import org.springframework.web.bind.annotation.*;
@RequestMapping("/test")
@RestController
public class test1 {
    @GetMapping("/1")
    public String test11(){
        return "這是axios發(fā)送get請(qǐng)求從后端獲取的數(shù)據(jù)";
    }   
    @GetMapping("/2")
    public int AB(@RequestParam int a, @RequestParam int b){
        return a + b;
    }
}

test1()方法:

  • 功能: 當(dāng)接收到GET請(qǐng)求 /test/1 時(shí),該方法返回一個(gè)字符串 “這是axios發(fā)送get請(qǐng)求從后端獲取的數(shù)據(jù)”。
  • 備注: 這是一個(gè)簡單的用于演示GET請(qǐng)求的方法,返回字符串?dāng)?shù)據(jù)。

二、axios與Spring Boot進(jìn)行前后端交互的實(shí)現(xiàn)

一、前后端交互配置

  • Arkts目錄結(jié)構(gòu)

image.png

前端axios封裝一個(gè)簡單的網(wǎng)絡(luò)請(qǐng)求 在src/main/ets/network/AxiosRequest.ets里

import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from '@ohos/axios' // 公共請(qǐng)求前綴 axios.defaults.baseURL = "http://192.168.211.1:8090" // 添加請(qǐng)求攔截器... // 添加響應(yīng)攔截器... // 導(dǎo)出 export default axios; export {AxiosResponse}

  • 后端用于配置跨域資源共享(CORS)的設(shè)置 登錄后復(fù)制 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 映射的路徑,這里是所有路徑 .allowedOrigins(" ") // 允許的來源,這里是所有來源,可以設(shè)置具體的域名或 IP 地址 .allowedMethods("PUT", "GET", "POST", "DELETE") // 允許的 HTTP 方法 .allowedHeaders(" ") // 允許的 HTTP 頭部 .allowCredentials(false) // 是否支持用戶憑據(jù),這里是不支持 .maxAge(300); // 預(yù)檢請(qǐng)求的有效期,單位秒 } @RequestMapping("/hello"):這個(gè)注解用于類級(jí)別,表示所有在這個(gè)控制器中的方法的URL映射的基本路徑 登錄后復(fù)制 @RestController @RequestMapping("/hello") public class SumUpController { ... }

二、不同請(qǐng)求的參數(shù)傳遞與后端接收返回代碼

1.get請(qǐng)求獲取數(shù)據(jù)

axios請(qǐng)求

export function get1(): Promise< AxiosResponse > {
  return axios.get('/hello/get1');
}

后端controller

@GetMapping("/get1")
public String get1(){
    return "這是你拿到的數(shù)據(jù)";
}

2.get請(qǐng)求傳遞多個(gè)參數(shù)

axios請(qǐng)求

export function get2(a: number, b: number): Promise< AxiosResponse > {
  return axios.get('/hello/get2', {
    //params字段包含了將要發(fā)送到后端的參數(shù)。
    params: {
      a: a,
      b: b
    }
  });
}

后端controller

@GetMapping("/get2")
 //使用@RequestParam注解從URL中獲取參數(shù)a和b。
 public String get2(@RequestParam int a, @RequestParam int b){
    return "你傳的兩個(gè)數(shù)是" + a + " " + b;
 }

@RequestParam 注解允許你自定義請(qǐng)求參數(shù)的名稱,并提供其他選項(xiàng),如設(shè)置默認(rèn)值或?qū)?shù)標(biāo)記為必需

3.get請(qǐng)求路徑參數(shù)

axios請(qǐng)求

export function get3(ps: number, pn: number): Promise< AxiosResponse > {
  //注意要用``(反引號(hào))
  return axios.get(`/hello/get3/${pn}/${ps}`);
}

后端controller

@GetMapping("/get3/{pn}/{ps}")
public String get3(@PathVariable("ps") int ps, @PathVariable("pn") int pn){
    return "你的查找要求是一頁" + ps + "條數(shù)據(jù)的第" +  pn + "頁";
}

@PathVariable("id") 表示要從路徑中提取一個(gè)名為 “id” 的變量,并將其值綁定到 itemId 參數(shù)上。

4.get請(qǐng)求返回JSON數(shù)據(jù)

axios請(qǐng)求

//定義請(qǐng)求接收的數(shù)據(jù)類型
export interface ResponseData {
  status: string;
  message: string;
}
export function get4(): Promise< AxiosResponse< ResponseData > > {
  return axios.get('/hello/get4');
}

Promise> 表示一個(gè) Promise 對(duì)象,該對(duì)象最終解決為 Axios 發(fā)起的 HTTP 請(qǐng)求的響應(yīng),而該響應(yīng)的數(shù)據(jù)體應(yīng)該符合 ResponseData 類型的結(jié)構(gòu)。

后端controller

//@Data注解一個(gè)類時(shí),Lombok會(huì)自動(dòng)為該類生成常見的方法,如toString()、equals(),以及所有字段的getter和setter方法。
@Data
public static class ResponseData {
    private String status;
    private String message;
}
@GetMapping("/get4")
public ResponseData get4() {
    ResponseData responseData = new ResponseData();
    responseData.setStatus("success");
    responseData.setMessage("這是一條成功的消息。");
    return responseData;
}

5.post 使用對(duì)象作為請(qǐng)求參數(shù)

axios請(qǐng)求

export function post1(person: { name: string, age: number }): Promise< AxiosResponse > {
  return axios.post(`/hello/post1`, person);
}

后端controller

@Data
public static class Person {
    private String name;
    private int age;
}
@PostMapping("/post1")
public String post1(@RequestBody Person person) {
    return "你傳的姓名: " + person.getName() + " 年齡: " + person.getAge() + "。";
}

6.post 使用Map接收J(rèn)SON數(shù)據(jù)

axios請(qǐng)求

//JSON中,鍵和字符串值都應(yīng)該被雙引號(hào)包圍如
export function post2(data: any): Promise< AxiosResponse > {
  return axios.post(`/hello/post2`, data);
}

后端controller

@PostMapping("/post2")
public String post2(@RequestBody Map< String, String > mp) {
    AtomicReference< String > data = new AtomicReference<  >("");
    mp.forEach((k, v) - >{
        data.set(data + k);
        data.set(data + ": ");
        data.set(data + v + ",");
    });
    return "你傳的鍵值對(duì)是: " + data;
}

7.put請(qǐng)求

axios請(qǐng)求

export function putExample(data: string): Promise< AxiosResponse > {
  return axios.put('/hello/putExample', {data: data});
}

后端controller

@PutMapping("/putExample")
public String putExample(@RequestBody String data) {
    return "這是PUT請(qǐng)求,傳入的數(shù)據(jù)是: " + data;
}

8.delete請(qǐng)求

axios請(qǐng)求

export function deleteExample(id: number): Promise< AxiosResponse > {
  return axios.delete(`/hello/deleteExample/${id}`);
}

后端controller

@DeleteMapping("/deleteExample/{id}")
public String deleteExample(@PathVariable("id") int id) {
    return "這是DELETE請(qǐng)求,要?jiǎng)h除的數(shù)據(jù)ID是: " + id;
}

三、調(diào)用傳參

import router from '@ohos.router'
import {get1, get2, get3, get4, post1, post2, putExample, deleteExample} from '../network/api/TestApi'
@Entry
@Component
struct Index {
  @State get1: string = "";
  @State get2: number = undefined;
  @State get3: number = undefined;
  @State get4: {status: string, message: string} = null;
  @State post1: string = "";
  @State post2: string = "";
  @State put: string = "";
  @State delete: string = "";
  build() {
    Column() {
      Button("get1-get請(qǐng)求獲取數(shù)據(jù)")
        .onClick(async () = >{
          this.get1 = (await get1()).data;
        })
      Text(this.get1)
        .fontSize(20)
      Button("get2-傳遞多個(gè)參數(shù)")
        .onClick(async () = >{
          this.get2 = (await get2(1, 3)).data;
        })
      Text(`${this.get2!=undefined?this.get2:""}`)
        .fontSize(20)
      Button("get3-路徑參數(shù)")
        .onClick(async () = >{
          this.get3 = (await get3(3, 4)).data;
        })
      Text(`${this.get3!=undefined?this.get3:""}`)
        .fontSize(20)
      Button("get4-返回JSON數(shù)據(jù)")
        .onClick(async () = >{
          this.get4 = (await get4()).data;
        })
      Text(this.get4!=null ? JSON.stringify(this.get4) : "")
        .fontSize(20)

      Button("post1-使用對(duì)象作為請(qǐng)求參數(shù)")
        .onClick(async () = >{
          this.post1 = (await post1({name: "張三", age: 18})).data;
        })
      Text(this.post1)
        .fontSize(20)

      Button("post2-使用Map接收J(rèn)SON數(shù)據(jù)的POST請(qǐng)求示例")
        .onClick(async () = >{
          this.post2 = (await post2({id: "1", name: "李四", status: "call"})).data;
        })
      Text(this.post2)
        .fontSize(20)

      Button("put請(qǐng)求")
        .onClick(async () = >{
          this.put = (await putExample("put data")).data;
        })
      Text(this.put)
        .fontSize(20)

      Button("delete請(qǐng)求")
        .onClick(async () = >{
          this.delete = (await deleteExample(10)).data;
        })
      Text(this.delete)
        .fontSize(20)
      Button("對(duì)一個(gè)表單的增刪改查")
        .margin(20)
        .onClick(() = >{
          router.pushUrl({
            url: "pages/TalentTableTest"
          })
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

以上就是鴻蒙開發(fā)的OpenHarmony;使用網(wǎng)絡(luò)組件axios與Spring Boot進(jìn)行前后端交互的技術(shù)解析,更多有關(guān)鴻蒙開發(fā)的學(xué)習(xí),可以去主頁查找,找我保存技術(shù)文檔。下面分享一張OpenHarmony學(xué)習(xí)路線圖

高清完整版曲線圖,可以找我保存 (附鴻蒙4.0&next版文檔)如下:

四、總結(jié)

一、請(qǐng)求參數(shù)錯(cuò)誤的常見情況:

  1. 參數(shù)名稱不一致
  2. 參數(shù)類型(格式)不一致
  3. 缺少必須的請(qǐng)求參數(shù)
  4. 請(qǐng)求頭信息不符合要求

二、不同請(qǐng)求方式與參數(shù)傳遞方式的對(duì)應(yīng)關(guān)系:

  1. RESTful風(fēng)格的API通常使用路徑變量傳遞參數(shù)。在Spring框架中,可以使用@PathVariable注解來接收這些參數(shù)。
  2. URL中使用params傳遞參數(shù)時(shí),通常使用@RequestParam注解來接收參數(shù)。
  3. 當(dāng)客戶端通過請(qǐng)求體傳遞JSON數(shù)據(jù)時(shí),可以使用@RequestBody注解來接收。
  4. @ModelAttribute用于綁定方法參數(shù)或方法返回值到模型中,通常用于將請(qǐng)求參數(shù)與模型屬性進(jìn)行綁定。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7402

    瀏覽量

    129313
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2963

    瀏覽量

    45905
  • OpenHarmony
    +關(guān)注

    關(guān)注

    33

    文章

    3952

    瀏覽量

    21103
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    解析Rockchip平臺(tái)U-Boot核心文件:boot_rkimg.c到底做了什么?

    在嵌入式開發(fā)中,U-Boot 作為引導(dǎo)程序的 “中流砥柱”,負(fù)責(zé)初始化硬件、加載內(nèi)核并啟動(dòng)系統(tǒng)。對(duì)于 Rockchip 平臺(tái)的設(shè)備(如常見的開發(fā)板、智能終端),boot_rkimg.c 是 U-Boot 中專門處理啟動(dòng)流程的核心
    的頭像 發(fā)表于 02-03 15:29 ?749次閱讀
    解析Rockchip平臺(tái)U-<b class='flag-5'>Boot</b>核心文件:<b class='flag-5'>boot</b>_rkimg.c到底做了什么?

    【原創(chuàng)】OpenHarmony系統(tǒng)投屏工具軟件 - OpenHarmony_OHScrcpy使用推薦

    OpenHarmony_OHScrcpy - OpenHarmony投屏工具軟件 OpenHarmony_OHScrcpy是一款為OpenHarmony系統(tǒng)設(shè)計(jì)的投屏工具軟件,功能類似
    發(fā)表于 01-22 18:34

    #OpenHarmony HDC調(diào)試

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:46:28

    #OpenHarmony 開發(fā)環(huán)境準(zhǔn)備

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:44:31

    #OpenHarmony 鏡像燒錄

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:42:36

    #OpenHarmony 系統(tǒng)概述

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:39:20

    #OpenHarmony Hello World應(yīng)用以及部署

    OpenHarmony
    視美泰
    發(fā)布于 :2026年01月16日 09:32:52

    釘釘正式開源HarmonyOS圖片編輯組件

    近日,由釘釘團(tuán)隊(duì)自主研發(fā)的“HarmonyOS圖片編輯組件”正式上線OpenHarmony三方庫中心倉并開源。作為一款填補(bǔ)鴻蒙社區(qū)圖像處理領(lǐng)域空白的重量級(jí)組件,該方案基于HarmonyOS
    的頭像 發(fā)表于 01-05 09:58 ?501次閱讀

    一款基于Java+Spring Boot+Vue的智慧隨訪管理系統(tǒng)源碼

    智慧隨訪管理系統(tǒng)源碼,一款基于Java+Spring Boot+Vue的B/S架構(gòu)醫(yī)院隨訪管理系統(tǒng)源碼,采用前后端分離技術(shù)(Ant-Design+MySQL5),具有自主版權(quán)和落地案例。 隨訪管理
    的頭像 發(fā)表于 11-13 15:38 ?399次閱讀
    一款基于Java+<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>+Vue的智慧隨訪管理系統(tǒng)源碼

    觸覺智能RK3576開發(fā)板OpenHarmony開源鴻蒙系統(tǒng)USB控制傳輸功能示例

    OpenHarmony開源鴻蒙設(shè)備與外部USB設(shè)備之間的連接管理、數(shù)據(jù)收發(fā)及設(shè)備信息交互,支持對(duì)USB設(shè)備的枚舉、配置及數(shù)據(jù)傳輸控制,適用于各類USB接口進(jìn)行設(shè)備通信的場景。如A
    的頭像 發(fā)表于 09-30 16:31 ?1572次閱讀
    觸覺智能RK3576開發(fā)板<b class='flag-5'>OpenHarmony</b>開源鴻蒙系統(tǒng)USB控制傳輸功能示例

    如何實(shí)現(xiàn)組件截圖 -- componentSnapshot

    等,文字和圖片都是根據(jù)用戶信息動(dòng)態(tài)生成的,整個(gè)證書在顯示的時(shí)候是通過Stack組件去完成的,如果只是在程序里顯示那么當(dāng)然很簡單,但是還需要將其作為一張圖片保存到相冊(cè)里。 按照我以前的做法,就是直接通過后端
    發(fā)表于 06-30 17:45

    UI開發(fā)概述

    聲明式UI前端和UI后端分層:UI后端采用C++語言構(gòu)建,提供對(duì)應(yīng)前端的基礎(chǔ)組件、布局、動(dòng)效、交互事件、組件狀態(tài)管理和渲染管線。 語言編
    發(fā)表于 06-24 06:36

    k8s網(wǎng)絡(luò)的基本介紹

    Kubernetes網(wǎng)絡(luò)是指在Kubernetes集群中不同組件之間進(jìn)行通信和交互網(wǎng)絡(luò)架構(gòu)。
    的頭像 發(fā)表于 06-16 13:42 ?946次閱讀

    UIAbility組件交互(設(shè)備內(nèi))說明

    UIAbility組件交互(設(shè)備內(nèi)) UIAbility是系統(tǒng)調(diào)度的最小單元。在設(shè)備內(nèi)的功能模塊之間跳轉(zhuǎn)時(shí),會(huì)涉及到啟動(dòng)特定的UIAbility,該UIAbility可以是應(yīng)用內(nèi)的其他
    發(fā)表于 05-16 06:12

    DialogHub上線OpenHarmony開源社區(qū),高效開發(fā)鴻蒙應(yīng)用彈窗

    作為鴻蒙應(yīng)用開發(fā)者,在使用ArkUI現(xiàn)有能力進(jìn)行彈窗開發(fā)時(shí),總會(huì)遇到一些讓人糾結(jié)的交互問題:應(yīng)用內(nèi)進(jìn)行消息提示時(shí),既要求消息內(nèi)容支持圖文混排,又要求彈窗本身不能打斷用戶交互(頁面滑動(dòng)、
    發(fā)表于 04-03 17:30